簡體   English   中英

MYSQL連接中的嵌套Select語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM