我一直在为星期四的考试做一些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