我不太確定這是叫什麼,但我花了一些時間考慮它,我不知道如何處理它。我確定這很簡單。SQL加入一個'除非'條款
我有兩個表,foo和bar。他們相關的是這樣的:
符表:
| id | name
--------------
| 1 | blah
| 2 | blarg
| 3 | blag
吧檯(巴茲的意思是無關緊要的):
| fooId | baz |
---------------
| 1 | 100 |
| 1 | 94 |
| 1 | 27 |
| 2 | 94 |
| 3 | 19 |
每美孚因此,多條。我要選擇,他們有94巴茲,除非他們還擁有了100個巴茲所有FOOS因此,在上述情況下,我只想用2
一個id我試圖做選擇美孚東西沿線:
SELECT id FROM foo
LEFT JOIN bar
ON foo.id = bar.fooId
WHERE bar.baz = 94
AND bar.baz != 100
但顯然,只有我到目前爲止。我確定這裏可能有一些group by clause,但我不確定它應該是什麼。
在此先感謝!
編輯:如果其他人有這個問題,如@iu提到,這個術語是anti-join。
Oracle的優化能夠看到NOT EXISTS,NOT IN和LEFT JOIN/IS NULL語義等價,只要名單值被聲明爲NOT NULL:http://explainextended.com/2009/09/17/not-in-vs-not-exists-vs-left-join-is-null-oracle/ – 2009-11-05 22:37:40