繁体   English   中英

SQL LEFT JOIN仅最新的右列条目?

[英]SQL LEFT JOIN only newest right column entry?

所以我有两个这样的表:

create table A
{
    id int;
    ...
}

create table B
{
    id int;
    a_id int;
    t timestamp;
    ...
}

A与B一对多

我想要:

SELECT * FROM A LEFT JOIN B ON A.id = B.a_id ???

但是我想为A中具有B的最新t字段的每个条目返回精确的一行(如果没有B条目,则Bs字段为null)。

那不是返回所有AB对,而是只选择关于A的最新一对(如果没有B条目,则选择A-null)。

有什么方法可以用SQL表示吗? (我正在使用MySQL 5.5)

LEFT JOIN 与确保返回A每一行有关,即使B没有相应的连接行。

just one row需要just one row需要另一种条件。 MySQL的选项受到限制,但其中一种可能是:

SELECT
  *
FROM
  A
LEFT JOIN
  B
    ON  B.id = A.id
    AND B.t = (SELECT MAX(lookup.t) FROM B AS lookup WHERE lookup.id = A.id)

另一个可能是...

SELECT
  *
FROM
  A
LEFT JOIN
(
  SELECT id, MAX(t) AS t FROM B GROUP BY id
)
  AS lookup
    ON lookup.id = A.id
LEFT JOIN
  B
    ON  B.id = lookup.id
    AND B.t  = lookup.t

您可以执行以下操作:

SELECT A.*, B.*
FROM 
    A
    LEFT JOIN 
    (SELECT B.a_id, MAX(t) as t FROM B GROUP BY B.a_id) BMax
    ON A.id = BMax.a_id
    JOIN B
    ON B.a_id = BMax.a_id AND B.t = BMax.t

您首先需要在子查询中从tableB获取最新的t ,然后将其与tableA和tableB联接。

SELECT  a.*, c.*
FROM    tableA a
        LEFT JOIN
        (
            SELECT a_ID, max(t) maxT
            FROM tableB
            GROUP BY a_ID
        ) b on a.a_id = b.a_ID
        LEFT JOIN tableB c
            ON b.a_ID = c.a_ID AND
                b.maxT = c.t

尝试这个:

SELECT * 
FROM tableA A LEFT JOIN 
     (select a_id ,max(t) as max_t
      from tableB
      group by a_id )b
on  A.id = b.a_id
and A.t=b.max_t

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM