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