我有兩個表MySQL查詢獲取單項和最新關聯項目
table1: { id, name }
table2: { id, table1_id, time_added }
很可能得到表1中的所有項目,只有最後添加的相關項目在表2中的單個查詢?
我有兩個表MySQL查詢獲取單項和最新關聯項目
table1: { id, name }
table2: { id, table1_id, time_added }
很可能得到表1中的所有項目,只有最後添加的相關項目在表2中的單個查詢?
這將工作:
SELECT
t1.*,
t2.*
FROM Table1 t1
INNER JOIN table2 t2 on t2.table1_id = t1.id
INNER JOIN (SELECT Max(time_added) as time_added, table1_id FROM Table2 Group by table1_id) t2a on
t2a.time_added = t2.time_added AND t2a.table1_id = t2.table1_id
子查詢返回max time_added和隨機table1_id,我不確定那就是你想做。另外,這並不一定會選擇表1中的所有項目,因爲它是一個內部聯接,也許你正在尋找一個外部聯接(但說實話,我不太瞭解OP想要做什麼)。編輯:實際上,由於第二次連接,這隻會選擇一行,因爲只有一行max可以匹配條件。 – 2010-11-20 02:16:48
@Vincent Savard @Kirk ...是的,我的查詢有點搞砸了......但這個工作..沒有外部聯接是沒有必要的。 – 2010-11-20 02:31:40
啊,你是對的,我(再一次)錯誤地閱讀了這個問題。 – 2010-11-20 02:36:17
SELECT table1.id,table1.name FROM表1表2 JOIN ON table1.id = table2.id GROUP BY table2.id ORDER BY DESC TIME_ADDED;
這是你的答案,讓我知道你是否需要澄清。
@ ajacian81 ... OP希望以下「獲取table1中的所有項目,僅添加table2中最後添加的相關項目」。您的查詢不會返回table2中的任何內容,並將從table1中返回重複項。這是不對的! – 2010-11-20 02:38:32
John:這裏的假設是table1和table2上的id是相同的。 – ajacian81 2010-11-21 12:45:05
它非常簡單的選擇表2中最後添加的項目。
SELECT * FROM TABLE1 AS tb1 WHERE tb1.id IN (SELECT MAX(id) FROM TABLE2)
注意:在上面的查詢中,table1的id和table2的id必須爲AUTO INCREMENTED。
試試以上查詢。
謝謝!
有了這個解決方案,您不需要子查詢... 基於ajacian81
SELECT table1.*, table2.*
FROM table1 LEFT JOIN table2
ON table1.id = table2.table1_id
GROUP BY table1.id
ORDER BY table2.time_added DESC;
你是什麼意思「在表2中,最後添加的相關項目」是什麼意思?這兩個表沒有任何共同之處,所以我們不能使用UNION,我也不完全明白你想從表2中選擇什麼。 – 2010-11-20 02:13:42