是什麼意思查詢這是什麼意思查詢
select fname, lname
from Owner
where not exists
(select fname, lname
from Trainer)
什麼我的理解:它返回FNAME和LNAME從表所有者那裏這些名稱不是在桌子教練exsit? 對不對?
是什麼意思查詢這是什麼意思查詢
select fname, lname
from Owner
where not exists
(select fname, lname
from Trainer)
什麼我的理解:它返回FNAME和LNAME從表所有者那裏這些名稱不是在桌子教練exsit? 對不對?
查找存在於Owner
表中但不存在於Trainer
表中的人員的姓名。
從owner
表中找不到trainer
表中不存在的所有人的列表,這是一個非常蹩腳的方式。
所以,如果Owner
表包含
----------------
fname | lname
----------------
clark | kent
lois | lane
peter | parker
和訓練表包含
----------------
fname | lname
----------------
peter | parker
hal | jordan
你應該得到一個結果集:
----------------
fname | lname
----------------
clark | kent
lois | lane
更新
實際上,如果Trainer表中有任何記錄,您的查詢將不會返回任何內容。您應該使用:
select fname, lname
from Owners
where not exists (
select fname, lname
from trainers
where fname=Owners.fname
and lname=Owners.lname
)
該查詢有兩個部分:'select'和'where'。 看那其中第一部分:
where not exists
(select fname, lname from Trainer)
這where子句評估爲「真」,如果有沒有在訓練表,併爲「假」,如果有那麼點意思。現在看看'select'部分:
select fname, lname from Owners
這將從'Owners'表中選擇所有行。
把它放在一起:查詢選擇Owner表中的所有行IF(並且只有)如果Trainer表中沒有任何內容 - 並且如果存在則絕對沒有。
這可能是一個意圖,但健忘的查詢作者並沒有將子選擇與頂級選擇關聯起來。如果'Trainer'爲空,則查詢返回'Owner'的所有行,否則返回無行。 – 9000 2010-12-16 20:43:55
@ 9000:非常漂亮。我不能相信我錯過了這一點。 – AgentConundrum 2010-12-16 20:49:42
但是當我運行查詢時沒有顯示任何結果,雖然兩個表都不一樣 – Stive 2010-12-16 20:49:48