我有兩個具有一對多關係的表。獲取數據,其中MAX(日期)<X
Table1
ID name email
Table2
ID table1_ID date
我需要從表1 where
獲取所有數據:
MAX(date) from Table2 < "2016-01-01"
這是行不通的。在where子句中Max被認爲是「無效的」。我做的是:
SELECT Table1.name, Table1.email, tmp.maxdate
FROM Table1
JOIN ( SELECT MAX(date) maxdate, table1_ID
FROM Table2
GROUP BY table1_ID) as tmp
ON tmp.table1_ID = table1.id
WHERE tmp.maxdate < "2016-01-01"
AND (other conditions)
所以這個工程。但我認爲表現會很糟糕 - explain
顯示所有Table2
正在被讀取,而這張表會增長很多。
任何想法,否則我該怎麼做,或者如何提高我目前的查詢性能?
爲什麼你認爲表現糟透了? –
有點奇怪,你會將tmp加入到table1中,而不是包括將tmp加入表2的中間步驟。另外,我會將WHERE子句放入子查詢中。除此之外,一個合適的索引,這個查詢應該是快速的。 – Strawberry
由於'MAX(date)'是一個聚集,它不能放在'WHERE'中,而是屬於'HAVING'。無論如何,正如其他人指出的那樣,您可以簡單地使用'WHERE date>'2016-01-01'',而不是'HAVING MAX(date)>'2016-01-01''。 –