我想弄清楚如何使用連接獲得相同的結果,因爲我會使用不存在的條件。等價查詢使用連接,而不是不存在
舉例來說,如果我有以下兩個表:
表1
--------------
|ID | EXT_ID |
|1 | A |
|2 | B |
|3 | C |
--------------
表2
-------------------------
|EXT_ID | TB1_ID |PRIMARY|
|A | 1 |1 |
|A | 1 |0 |
|B | 2 |0 |
|B | 2 |0 |
-------------------------
如果我想找到從表1中的記載,在表2中沒有主標誌爲1的情況下,對於表2中實際上有一個子項的記錄(爲了排除孤兒),我可以簡單地寫下面的內容(預期僅從表1返回ID 2):
SELECT TB1.ID FROM Table1 TB1
JOIN Table2
ON Table1.EXT_ID = Table2.EXT_ID
WHERE Table2.Primary = 0
AND NOT EXISTS
(
SELECT * FROM Table2 TB2
WHERE TB1.ID = TB2.TB1_ID
AND TB2.PRIMARY = 1
)
有沒有辦法用連接做到這一點?如果是這樣,使用不存在與聯接會有多大的效率?
在此先感謝!
編輯:固定表。
我很好奇,如果你有查詢是拉回結果,你爲什麼要重構它?它運行速度不合理嗎? – user2366842
此外,我猜不是,提供的信息,但它可能是主要等於一些數字以外的零或1,或者這是一個布爾字段? – user2366842
它應該只等於1或0,如果它包含其他值,我會使用isnull。我嚴格地希望在練習中有不同的表現。 – tchock