【问题标题】:Get only last record of JOIN in MySQL仅获取 MySQL 中 JOIN 的最后一条记录
【发布时间】:2015-12-05 06:55:18
【问题描述】:

我有 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

【问题讨论】:

  • 你如何定义最后的结果?这可能涉及在表 A 列上进行分组,并在 B 列上定义 最后一个结果 的聚合函数,然后连接回 B 以获取额外的行数据。

标签: mysql left-join outer-join


【解决方案1】:

如果表 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】:

    您可以使用group by 删除表中的所有其他列B
    然后加入表 A 以获得结果
    Group by 需要 aggregate functionminmax

    这里我用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
    

    【讨论】:

      【解决方案3】:
      SELECT 
          ida,idb,cola1,colb1 
      FROM a 
      LEFT OUTER JOIN b ON ida=fka 
      ORDER BY ida DESC LIMIT 1
      

      也许这个对你有帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-26
        • 2019-12-28
        • 2012-02-13
        • 1970-01-01
        • 2019-09-02
        • 2023-03-16
        相关资源
        最近更新 更多