(以下用 T-SQL 語法)
EXISTS (
SELECT 1 AS COL_A
)
以上子句為單筆單欄資料
只要 EXISTS 後面的子句有資料回傳, 就會是 true
你用 NOT EXISTS + 子句
而子句回傳 2 2 的一筆資料
所以 NOT EXISTS 永遠都會是 false
如果 2 2 這筆才是你要的 (Table s join Table p 且不存在於 Table sp 內)
那只要下
SELECT *
FROM S, P
WHERE NOT EXISTS (
SELECT 1
FROM SP
WHERE SP.s = S.s
AND SP.p = P.p
)
※ 引述《yscgk (中山的遊客)》之銘言:
: ※ 引述《bohei (run and fall)》之銘言:
: : 小弟是用Oracle的,所以不確定是不是100%一樣,
: : 第一層的EXISTS因為沒下任何跟外面相關連的條件,
: : 所以當有select row即視為TRUE,再遇到NOT,當然就變成FALSE
: : 你試著在第一層的EXISTS加上關聯條件,就可以得到不同的結果了~
: : GO!
: 謝謝
: 剛剛試了一下 還是不太懂
: 然後之前
: SELECT *
: FROM s, p, sp
: WHERE NOT
: EXISTS (
: SELECT *
: FROM s
: WHERE NOT
: EXISTS (
: SELECT *
: FROM sp
: WHERE s.s = sp.s
: AND p.p = sp.p
: )
: );
: 上面這一串 我只改了第一個Not exists裡的From
: 從s,p改成s
: 就跑出
: Sname s PName p s p
: s1 1 p1 1 1 1
: s2 2 p1 1 1 1
: s1 1 p1 1 1 2
: s2 2 p1 1 1 2
: s1 1 p1 1 2 1
: s2 2 p1 1 2 1
: 這樣的結果...
: 搞得我好亂阿= ="