我创建了一个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