看板 Database 關於我們 聯絡資訊
(以下用 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 : 這樣的結果... : 搞得我好亂阿= =" -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.68.117.187 ※ 文章網址: http://www.ptt.cc/bbs/Database/M.1407153162.A.40A.html ※ 編輯: smlboby (219.68.117.187), 08/04/2014 19:53:57 ※ 編輯: smlboby (219.68.117.187), 08/04/2014 19:54:27