2013-02-01 37 views
4

這似乎很簡單,但我似乎無法弄清楚沒有進行子查詢(這似乎顯着減慢了查詢速度 - 需要將近10秒而不是< 1)。MySQL - 引用聚合列在where子句中

比方說,我有一張已發送文檔的表格,而且我想選擇自上次發送之後已更新的文檔以及從未發送過的文檔。

SELECT d.document_id, max(sd.document_sent_date) as last_sent_date 
FROM documents d 
LEFT JOIN sent_documents sd ON d.document_id=sd.document_id 
WHERE last_sent_date is NULL OR last_sent_date<d.last_updated 
GROUP BY d.document_id 

是這樣的可能嗎?基本上,我想在我的where子句中使用max()的結果。

+2

+1的確切標題,我搜索。 –

回答

3

您想要having子句。

一般規則:where上日期操作之前聚集,having後聚合數據操作。

+1

更具體地說:在訪問行時評估WHERE子句中的謂詞;在「HAVING」子句中的謂詞在結果集準備好之後進行評估,幾乎在執行計劃中處於最後(在處理ORDER BY和LIMIT子句之前)。因此,HAVING子句中的謂詞可以引用聚合,以及在WHERE子句中無法訪問的表達式和列別名。 – spencer7593

+0

完美!謝謝!! – fufonzo