說我有這樣的查詢排除行基於其他行(SQL)
TABLE
ID | DATA | VAL
===============
01 | ABCD | 1
01 | DEFG | 2
02 | FGHI | 3
02 | HIJK | 2
03 | JKLM | 3
03 | LMNO | 4
04 | NOPQ | 0
04 | PQRS | 1
目前,我有一個試圖找到唯一的好值的查詢像這樣,但它有缺陷,因爲其他行中具有不良VAL的ID被包括在內,這不是我想要的。
SELECT *
FROM TABLE
WHERE TABLE.VAL IN ("1","2","3")
將返回這個(與LMNO PQRS和遺漏):
TABLE
ID | DATA | VAL
===============
01 | ABCD | 1
01 | DEFG | 2
02 | FGHI | 3
02 | HIJK | 2
03 | JKLM | 3
04 | NOPQ | 0
但是,我只希望在ID無不良值的行。所以,01和02都很好,因爲他們所有的行都有很好的結果。 03和04是不好的,因爲它們被其他行中的不好結果所污染。
我可以像這樣把結果帶入軟件,然後用軟件處理它,但似乎這對數據庫來說應該是可能的,並且作爲一般規則,在數據庫上執行它比在軟件中更好(你知道,這是一種他們在那裏爲...什麼)
我能想出的最好的是這樣的:
SELECT *
FROM TABLE
WHERE COUNT(SELECT ID
FROM TABLE
WHERE TABLE.VAL NOT IN ("1","2","3")
) = 0
這是可行的?有更好的選擇嗎?
謝謝!
對於什麼數據庫和版本? – 2011-01-28 00:25:33