我已經撕裂了我的頭髮在此:問題將謂詞外連接
-- misses nulls
SELECT *
FROM BASE_TABLE TAB1
FULL JOIN BASE_TABLE TAB2
USING (ANOTHER_ID)
WHERE (TAB1.ID = 6 OR TAB1.ID IS NULL)
AND (TAB2.ID = 8 OR TAB2.ID IS NULL);
-- catches nulls
SELECT *
FROM (SELECT * FROM BASE_TABLE WHERE ID = 6) TAB1
FULL JOIN (SELECT * FROM BASE_TABLE WHERE ID = 8) TAB2
USING (ANOTHER_ID);
的第一個查詢失去其中一個行或其他表不存在行。爲什麼第一個查詢無法執行外連接?
我一直在想我已經得到它 - WHERE子句首先被評估,所以'OR IS NULL'稍後不會被應用 - 但這對我沒有意義,因爲我已經成功地應用了'IS NULL '過去在連接後選擇行的謂詞。
我想做第一個查詢工作,出於性能原因 - 有誰知道問題是什麼?
我感到困惑`USING` - 什麼語法是什麼?我無法在任何文檔中找到它,普通SQL使用`ON TAB1.ANOTHER_ID = TAB2.ANOTHER_ID` ..? – thomaspaulb 2010-12-09 23:25:21
@littlegreen 9i以來的Oracle特性。它基本上是你寫的內容的簡寫。 – 2010-12-09 23:27:11
@littlegreen,djacobson:當你使用`USING(ANOTHER_ID)`時,它只會產生一個名爲`ANOTHER_ID`的列(不能被別名引用),而`ON`語法產生兩列。 – 2010-12-10 02:34:26