다른 테이블의 필드 값을 기반으로 내부 테이블을 조건부로 변경할 수있는 방법이 있습니까? 여기에 지금까지 가지고 무엇을 (그러나 오류) 아웃 :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 문을 사용하려고했으나 오류도 발생했습니다.
하지만? "고유 테이블/별칭 : 'ui'가 아닌 오류가 발생했습니다. – Brds
userinfo 테이블에 조인하지 말고 여러 번 같은 별칭을 지정하십시오. 당신은 아마 조인에 비슷한 CASE를 사용해야합니다. sqlfiddle 스키마를 조합하려는 경우 제안을 테스트 할 수 있습니다. – Alkini