【问题标题】:Nested Select statement in MYSQL joinMYSQL 连接中的嵌套 Select 语句
【发布时间】: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 的新手。有人有什么建议或想法吗?

【问题讨论】:

    标签: mysql join nested greatest-n-per-group


    【解决方案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 问题,因此您可以关注该标签以查看数十个类似的问题及其答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-03
      • 2010-09-12
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      相关资源
      最近更新 更多