我創建了一個SQL Fiddle查詢,以測試你的問題的條件的行。請檢查以確認它符合您的方案。
where子句正在爭奪左連接。將兩個過濾器上CAT_ID到加盟條款是這樣的:
SELECT THER_ID, r1.CODE_NAME, r2.CODE_NAME as Name2
FROM THER t
LEFT JOIN REF_CODE r1 ON t.PROT = r1.CODE AND r1.CAT_ID = '1'
JOIN REF_CODE r2 ON t.THER_TYPE = r2.CODE AND r2.CAT_ID = '2'
WHERE EVENT_ID = 1234;
其他不乾淨的方式做,這就是圍繞與左側的where子句的部分與isnull()
這樣加入:
SELECT THER_ID, r1.CODE_NAME, r2.CODE_NAME as Name2
FROM THER t
LEFT JOIN REF_CODE r1 ON t.PROT = r1.CODE
JOIN REF_CODE r2 ON t.THER_TYPE = r2.CODE AND r2.CAT_ID = '2'
WHERE EVENT_ID = 1234
AND Coalesce(RTRIM(r1.CAT_ID),'1') = '1'
看到這個相似的答案Left Outer Join Not Working。
附加:
如果@ SoulTrain的查詢工作,那麼你一定也有在Ref_Code做不匹配排在療法行。在這種情況下,您確實需要使用兩個左連接,但連接的順序並不重要。請參閱updated SQL Fiddle Example以查看此查詢的實際操作。這是最後一個查詢。
SELECT THER_ID, r1.CODE_NAME, r2.CODE_NAME
FROM THER t
LEFT JOIN REF_CODE r1 ON t.PROT = r1.CODE and r1.Cat_ID = 1
LEFT JOIN REF_CODE r2 ON t.THER_TYPE = r2.CODE AND r2.CAT_ID = '2'
WHERE EVENT_ID = 1234;
您使用的是什麼版本的SQL? – Abraham
可能重複的[左外連接不工作?](http://stackoverflow.com/questions/12467744/left-outer-join-not-working) – Abraham
使用Oracle 11g的方式.... – davemere