2016-06-07 2 views
0

채팅 참가자 테이블이 있습니다 (data_chats_parties). 이 표에는 참가자가 구성원인지 또는 팀 계정인지 나타내는 두 개의 필드, teammember이 있습니다. team = 0이면 회원 계정입니다. 팀! = 0이면 팀 계정입니다.조건에 따라 다른 테이블을 조인하십시오.

팀 계정 인 경우 열을 data_teams 테이블에서 가져와야합니다. 그렇지 않으면 data_members 테이블에서 username 열을 가져와야합니다.

분명히이 쿼리는 작동하지 않지만 내가 달성하려고하는 것입니다.

SELECT data_chats_parties.*,data_teams.name,data_members.username 
FROM data_chats_parties 
    IF (data_chats_parties.team!=0 THEN 
    INNER JOIN data_teams ON data_teams.id=data_chats_parties.team ELSE 
    INNER JOIN data_members ON data_members.id=data_chats_parties.member) 
WHERE data_chats_parties.member!=1 
GROUP BY data_chats_parties.id 

WHERE data_chats_parties.member!=1 라인은 "저를하지 않은 참가자를 가져"말했다.

이렇게하면 가능합니까?

+0

별도의 쿼리를 수행하고, UNION''와 조합. – Barmar

답변

1

당신은 2 개 개의 다른 쿼리를 사용해야하고는 UNION ALL 수행 : 각 조인

-- Get teams 
SELECT 
    dcp.*, dt.name 
FROM data_chats_parties dcp 
INNER JOIN data_teams dt 
    ON dt.id = dt.team 
WHERE 
    dcp.member <> 1 
    AND dcp.team <> 0 

UNION ALL 

-- Get members 
SELECT 
    dcp.*, dt.name 
FROM data_chats_parties dcp 
INNER JOIN data_members dm 
    ON dt.id = dt.member 
WHERE 
    dcp.member <> 1 
    AND dcp.team = 0 
관련 문제