MYSQL 连接中的嵌套 Select 语句
Posted
技术标签:
【中文标题】MYSQL 连接中的嵌套 Select 语句【英文标题】:Nested Select statement in MYSQL join 【发布时间】:2011-11-03 21:43:18 【问题描述】: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 的新手。有人有什么建议或想法吗?
【问题讨论】:
【参考方案1】:我以不同的方式执行这种类型的查询,使用排除连接而不是子查询。您想找到 B 中对于给定 ID 具有最大 Time 的行;换句话说,没有其他行具有更大的时间和相同的 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)
P.S.:我添加了greatest-n-per-group
标签。 Stack Overflow 上每周都会出现这种类型的 SQL 问题,因此您可以关注该标签以查看数十个类似的问题及其答案。
【讨论】:
以上是关于MYSQL 连接中的嵌套 Select 语句的主要内容,如果未能解决你的问题,请参考以下文章