仅获取 MySQL 中 JOIN 的最后一条记录
Get only last record of JOIN in MySQL
我有 2 个表 A、B,其中 B 包含 A 的外键
ida,cola1
idb,fka,colb1
对于来自 A 的每条记录,我只需要获取 LEFT OUTER JOIN 的最后一个结果。以下查询显示所有 JOIN,如何将其限制为仅 fka 的最后一次出现?
SELECT ida,idb,cola1,colb1 FROM a LEFT OUTER JOIN b ON ida=fka
SELECT
ida,idb,cola1,colb1
FROM a
LEFT OUTER JOIN b ON ida=fka
ORDER BY ida DESC LIMIT 1
可能这个对你有帮助。
您可以使用 group by
从 table B
中删除所有其他列
然后加入 table A
得到结果
Group by
需要 aggregate function
,例如 min
或 max
等
这里我用min
试了一下
SELECT
ida, idb, cola1, colb1
FROM A LEFT OUTER JOIN (
select
min(idb) idb, fka, min(colb1) colb1
from B
group by fka
) b
ON ida = fka
如果 table b 中的最后一个结果是具有最高 idb 的结果,那么一种解决方案是使用子查询,在该子查询中为每个 fka 计算 max(idb):
select
a.ida,
a.cola1,
b.idb,
b.fka,
b.colb1
from
a left outer join (
select fka, max(idb) as max_idb
from b
group by fka
) max_b on a.ida=max_b.fka
left outer join b on max_b.fka=b.fka and max_b.max_idb=b.idb
我有 2 个表 A、B,其中 B 包含 A 的外键
ida,cola1
idb,fka,colb1
对于来自 A 的每条记录,我只需要获取 LEFT OUTER JOIN 的最后一个结果。以下查询显示所有 JOIN,如何将其限制为仅 fka 的最后一次出现?
SELECT ida,idb,cola1,colb1 FROM a LEFT OUTER JOIN b ON ida=fka
SELECT
ida,idb,cola1,colb1
FROM a
LEFT OUTER JOIN b ON ida=fka
ORDER BY ida DESC LIMIT 1
可能这个对你有帮助。
您可以使用 group by
从 table B
中删除所有其他列
然后加入 table A
得到结果
Group by
需要 aggregate function
,例如 min
或 max
等
这里我用min
SELECT
ida, idb, cola1, colb1
FROM A LEFT OUTER JOIN (
select
min(idb) idb, fka, min(colb1) colb1
from B
group by fka
) b
ON ida = fka
如果 table b 中的最后一个结果是具有最高 idb 的结果,那么一种解决方案是使用子查询,在该子查询中为每个 fka 计算 max(idb):
select
a.ida,
a.cola1,
b.idb,
b.fka,
b.colb1
from
a left outer join (
select fka, max(idb) as max_idb
from b
group by fka
) max_b on a.ida=max_b.fka
left outer join b on max_b.fka=b.fka and max_b.max_idb=b.idb