它看起來像你想的內部連接到TBLDESC
表CODE_1
,只要是永遠不能爲null;和外部連接到CODE_2
的同一張表。當CODE_2
爲空將無法找到任何內容,因此C.CODE_DESC
將爲空 - 但將其設爲外部聯接意味着TBLCODE
記錄不會被丟棄,這就是您現在看到的內部聯接:
SELECT A.ID, A.CODE_1, B.CODE_DESC AS DESC_1, A.CODE_2, C.CODE_DESC AS DESC_2
FROM TBLCODE A
JOIN TBLDESC B ON B.CODE1 = A.CODE_1
LEFT JOIN TBLDESC C ON C.CODE1 = A.CODE_2;
如果CODE_1
可能爲空,則使它們都爲LEFT JOIN
。
如果你不想兩次打表,你可以使用一個外連接,然後CASE
來決定哪一個去哪裏,但有點混亂;爲的小十歲上下的查找表,它可能是不值得的:
SELECT A.ID, A.CODE_1,
MAX(CASE WHEN B.CODE1 = A.CODE_1 THEN B.CODE_DESC END) AS DESC_1,
A.CODE_2,
MAX(CASE WHEN B.CODE1 = A.CODE_2 THEN B.CODE_DESC END) AS DESC_2
FROM TBLCODE A
LEFT JOIN TBLDESC B ON B.CODE1 IN (A.CODE_1, A.CODE_2)
GROUP BY A.ID, A.CODE_1, A.CODE_2
ORDER BY A.ID;
SQL Fiddle。
[不良習慣踢:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- joins.aspx) - 舊式*逗號分隔的表*樣式列表已停止使用ANSI - ** 92 ** SQL標準(超過** 20年前**) –