→ bohei:等等....你最裡面的s跟p到底是指哪兒的s跟p? 08/01 21:17
→ bohei:你先試著把table都給別名,不然連自己在寫什麼都混亂了, 08/01 21:22
→ bohei:又要怎麼去解讀SELECT後的結果呢 08/01 21:22
→ bohei:另外,execution plan可以看SQL細部的計畫 08/01 21:29
剛剛試了一下
EXPLAIN SELECT *
FROM s, p, sp
WHERE NOT
EXISTS (
SELECT *
FROM s AS ss, p AS pp
WHERE NOT
EXISTS (
SELECT *
FROM sp
WHERE s.s = sp.s
AND p.p = sp.p
)
);
節錄輸出
id select_type table type key rows Extra
1 PRIMARY s ALL NULL 2
1 PRIMARY p ALL NULL 2 Using where
1 PRIMARY sp index PRIMARY 3 Using index
2 DEP~ SUBQUERY ss index PRIMARY 2 Using index
2 DEP~ SUBQUERY pp index PRIMARY 2 Using where;Using index
3 DEP~ SUBQUERY sp eq_ref PRIMARY 1 Using index
看來似乎是指向中間的s和p
只是小弟不才
看不太出來這說明了什麼....Orz
※ 編輯: yscgk (36.238.195.54), 08/01/2014 23:31:52
後來發現我裡面沒改
以下是改變的部分
EXPLAIN SELECT *
FROM s, p, sp
WHERE NOT
EXISTS (
SELECT *
FROM s AS ss, p AS pp
WHERE NOT
EXISTS (
SELECT *
FROM sp AS spsp
WHERE ss.s = spsp.s
AND pp.p = spsp.p
)
);
輸出
id select_type table type key rows Extra
1 PRIMARY NULL NULL NULL NULL Impossible WHERE
2 SUBQUERY ss index PRIMARY 2 Using index
2 SUBQUERY pp index PRIMARY 2 Using where; Using index
3 DEP~ SUBQUERY spsp eq_ref PRIMARY 1 Using index
這個看起來就是輸出為空
不過有了這些 我也還是不會解釋
其實別名這問題一直困惑著我
別名後的Table 和原來的table是怎樣的情況阿...
※ 編輯: yscgk (36.238.195.54), 08/01/2014 23:45:31
→ bohei:你最後的例子,就是一開始講的那樣吧,你應該去看一下 08/01 23:54
→ bohei:EXISTS是怎麼決定是否讓主SELEC回傳的 08/01 23:54
謝謝bohei大大 大感謝
就如你所說的
我在兩個not exists內都加入了和外面的連結後(s.s=ss.s...etc)
就出現了滿意的結果
Sname s PName p s p
s1 1 p1 1 1 1
s1 1 p2 2 1 2
s2 2 p1 1 2 1
所以說別名過後的table操作的狀況
和主select的table是沒關係的(不知道這樣說對不對)
真的謝謝bohei大大
※ 編輯: yscgk (36.238.195.54), 08/02/2014 00:17:24
→ bohei:三層分別以1.2.3來表示好了,我一開始就以為你的意思是 08/02 00:19
→ bohei:1與2連結 2與3連結,所以我沒考慮到1直接跟3,這部分我不確定 08/02 00:20
→ yscgk:新手上路.有時我也不知我在做啥..可以安心睡了~謝謝你 08/02 00:23