我一直在爲星期四的考試做一些SQL,並且懷疑我是否正確使用了EXISTS語句。這是使用EXISTS的正確方法嗎?
所以,在這裏我有2個表
Machines Maintenance
============ ==============
PK ID_Machine PK ID_Machine FK
Name PK ID_Task FK
Date_bought Date
這樣一個數據庫,他們要我寫查詢說「顯示所有這一切並沒有收到任何維護在2011年的最古老的機器數據」
我做了如下的方式:
SELECT M.ID_MACHINE, M.NAME, M.DATE_BOUGHT
FROM MACHINES M
WHERE NOT EXISTS (SELECT MA.*
FROM MAINTENANCE MA
WHERE MA.ID_MACHINE = M.ID_MACHINE
AND YEAR(MA.DATE) = 2011)
AND EXISTS (SELECT MIN(M2.DATE_BOUGHT)
FROM MACHINE M2
WHERE M2.ID_MACHINE = M.ID_MACHINE)
這是做這個查詢的正確道路?在EXISTS語句中使用SELECT MIN()是否有意義?
在此先感謝大家!
嗯....當您嘗試運行該查詢會發生什麼? – 2012-02-28 01:55:20
那麼,問題是我實際上沒有在任何DBMS中創建此DB。這只是教科書中的練習,我正在用一張紙來解決它。不幸的是,教科書沒有答案,所以這就是爲什麼我問:) – nachoargentina 2012-02-28 02:00:30
一開始,你需要一個'AND' *而不是*第二個'WHERE'。另外,絕對不要在'EXISTS'中使用'SELECT MIN()' - 這是沒有意義的。 – Bohemian 2012-02-28 02:17:53