題目:找出沒有銷售GEO POSITIONING SYSTEM的部門
標准解:
SELECT deptname
FROM qdept
where deptname not in
(select deptname from qsale
where itemname = 'Geo Positioning System')
我的解法
(select distinct deptname from qsale
where itemname != 'Geo Positioning System')
第一種解法我能明白它的邏輯.
但是我後來想,,既然qsale已經有我需要的兩個變量了,為何還要引用qdept這個表呢呢?後來就寫出了我的第二種解法.
寫出來之後,兩種方法輸出一看,發現結果完全不一樣,這是為什麼呢?
以下是關系圖,大家可以參考以下.
兩個當然不一樣 舉個例子
QSALE裡面有一個deptment 有銷售過兩種item 一個是Geo Positioning System 另一個是XXX
第一個SQL是不會返回這個deptment
而第二個SQL會返回的 以為這個deptment 也賣過不是Geo Positioning System的item
總之 第一個SQL是“沒有賣過” 第二個SQL是“有沒賣過”