2013-03-26 3 views
1

다른 테이블의 필드 값을 기반으로 내부 테이블을 조건부로 변경할 수있는 방법이 있습니까? 여기에 지금까지 가지고 무엇을 (그러나 오류) 아웃 :MySQL의 조건부 내부 조인 문

SELECT 
    j.jobID, j.jobNumber, 
    CASE 
     WHEN j.idType = 'dealership' THEN d.dealershipName 
     WHEN j.idType = 'Group' THEN g.groupName 
     WHEN j.idType = 'Agency' then a.agencyName 
    END as dealershipName, 
    CASE 
     WHEN p.manualTimestamp != '0000-00-00 00:00:00' THEN UNIX_TIMESTAMP(p.manualTimestamp) 
     WHEN p.manualTimestamp = '0000-00-00 00:00:00' THEN p.timestamp 
    END as checkTS, 
    CONCAT_WS(' ', ui.fName, ui.lName) as salesRep 
FROM jobs j 
LEFT JOIN dealerships d ON j.dealershipID = d.dealershipID 
LEFT JOIN dealershipgroups g ON j.dealershipID = g.groupID 
LEFT JOIN agencies a ON j.dealershipID = a.agencyID 
INNER JOIN payments p ON j.jobID = p.jobID 
IF j.idType = 'dealership' THEN 
    INNER JOIN smdealershipjoins smdj ON j.dealershipID = smdj.dealership 
    INNER JOIN userinfo ui ON smdj.sm = ui.userID   
ELSEIF j.idType = 'Group' THEN 
    INNER JOIN smgroupjoins gj ON j.dealershipID = gj.groupID 
    INNER JOIN userinfo ui ON gj.sm = ui.userID 
ELSEIF j.idType = 'Agency' THEN 
    INNER JOIN smagencyjoins aj ON j.dealershipID = aj.agencyID 
    INNER JOIN userinfo ui on aj.sm = ui.userID 
END IF 

그래서, 가지고 idType (대리점, 그룹 또는 기관) 테이블 (작업) 및 (dealershipID라고 함) 된 ClientID있다. 내가해야할 일은 idType을 기반으로 한 특정 테이블에 가입하여 판매 관리자가 고객 계정을 "소유"하고 있는지 확인하는 것입니다. idType = 'dealership'인 경우 smdealershipjoins에 가입해야합니다. 'Group'인 경우 smgroupjoins에 가입해야하며 '대행사'인 경우 smagencyjoins에 가입해야 해당 테이블을 userinfo에 가입하여 판매를 얻을 수 있습니다 관리자의 이름.

내부 조인을 수행하기 위해 case 문을 사용하려고했으나 오류도 발생했습니다.

답변

6

세 가지 옵션 각각에 대한 왼쪽/오른쪽 조인과 선택 항목의 조건부가 나머지를 처리합니다.

아마도 같은 : 내 UI 테이블에 대한

... 
LEFT JOIN smdealershipjoins smdj 
    ON j.dealershipID = smdj.dealership 
LEFT JOIN smgroupjoins gj 
    ON j.dealershipID = gj.groupID 
LEFT JOIN smagencyjoins aj 
    ON j.dealershipID = aj.agencyID 
LEFT JOIN userinfo ui 
    ON ui.userID = CASE 
     WHEN j.idType = 'dealership' THEN smdj.sm 
     WHEN j.idType = 'Group' THEN gj.sm 
     WHEN j.idType = 'Agency' then aj.sm 
    END 
+0

하지만? "고유 테이블/별칭 : 'ui'가 아닌 오류가 발생했습니다. – Brds

+0

userinfo 테이블에 조인하지 말고 여러 번 같은 별칭을 지정하십시오. 당신은 아마 조인에 비슷한 CASE를 사용해야합니다. sqlfiddle 스키마를 조합하려는 경우 제안을 테스트 할 수 있습니다. – Alkini