[英]Nested Select statement in MYSQL join
SELECT * FROM A
JOIN B
ON B.ID = A.ID
AND B.Time = (SELECT max(Time)
FROM B B2
WHERE B2.ID = B.ID)
我試圖在MYSQL中加入這兩個表。 不要注意,如果ID是唯一的,那么我不會嘗試這樣做。 我濃縮了真實的解決方案來繪制簡化的圖片。 我試圖在特定記錄的最大日期抓住並加入表B. 此過程由SSIS包運行,並且說B2.ID是未知列。 我經常在MSSQL中做這樣的事情並且是MYSQL的新手。 任何人有任何指針或想法?
我以不同的方式執行此類查詢,使用排除連接而不是子查詢。 您想要找到具有給定ID的最大時間的B行; 換句話說,沒有其他行具有更大的時間和相同的ID。
SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
LEFT OUTER JOIN B AS B2 ON B.ID = B2.ID AND B.Time < B2.Time
WHERE B2.ID IS NULL
您還可以使用派生表 ,該表應該比使用相關子查詢更好。
SELECT A.*, B.*
FROM A JOIN B ON B.ID = A.ID
JOIN (SELECT ID, MAX(Time) AS Time FROM B GROUP BY ID) AS B2
ON (B.ID, B.Time) = (B2.ID, B2.Time)
PS:我添加了greatest-n-per-group
標簽。 這種類型的SQL問題每周都會出現在Stack Overflow上,因此您可以按照該標記查看數十個類似問題及其答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.