我有兩個表,其中包含名稱以及與這些名稱相關的日期時間表。我正在嘗試獲取過去2個月內從未計劃或未安排的所有名稱的列表。在子查詢中選擇列的位置是否爲空
SELECT n.name, MAX(s.date)
FROM names n
LEFT JOIN schedule s ON n.id = s.nameid
WHERE s.nameid IS NULL
OR s.nameid NOT IN (SELECT nameid
FROM schedule
WHERE date > NOW() - INTERVAL 2 MONTH)
GROUP BY n.id
當我運行這個查詢時,MySQL接管了CPU並且沒有響應。
當我把它更改爲這些我得到的結果,但只有結果的一半我要找:
SELECT n.name, MAX(s.date)
FROM names n
LEFT JOIN schedule s ON n.id = s.nameid
WHERE s.nameid IS NULL
GROUP BY n.id
SELECT n.name, MAX(s.date)
FROM names n
LEFT JOIN schedule s ON n.id = s.nameid
WHERE s.nameid NOT IN (SELECT nameid
FROM schedule
WHERE date > NOW() - INTERVAL 2 MONTH)
GROUP BY n.id
我不知道如何得到這個查詢工作,返回所有的結果,或者爲什麼它接管了CPU。
你爲什麼不只是'union'在一起? – gangreen 2012-03-07 05:29:10
請注意,如果比較的列不能爲NULL,則LEFT JOIN/IS NULL在MySQL上只會更快:http://explainextended.com/2009/09/18/not-in-vs-not-exists-vs-left -join-is-null-mysql/ – 2012-03-07 05:37:51