跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • 请教 left join 右表后,只返回 在 leftjoin 的结果里,返回右表中 OrderNo 最大的那一条
未分類
30 8 月 2020

请教 left join 右表后,只返回 在 leftjoin 的结果里,返回右表中 OrderNo 最大的那一条

请教 left join 右表后,只返回 在 leftjoin 的结果里,返回右表中 OrderNo 最大的那一条

資深大佬 : rqxiao 9

https://www.w3school.com.cn/sql/sql_join_left.asp

想要 结果

Adams John 24562

Carter Thomas 77895

Bush George

大佬有話說 (12)

  • 資深大佬 : taogen

    select … from A join B … order by orderNo desc limit 1

  • 資深大佬 : zhenglee

    SELECT Persons.LastName, Persons.FirstName, Orders.OrderNo
    FROM Persons
    LEFT JOIN Orders
    ON Persons.Id_P=Orders.Id_P
    where Orders.OrderNo in
    (select max(OrderNo) from Orders group by ID_P)
    ORDER BY Persons.LastName

  • 資深大佬 : taogen

    @zhenglee group by 和 聚合函数,要使用相同字段

  • 資深大佬 : zhenglee

    @taogen 没有这么一说,实践出真知。

  • 資深大佬 : taogen

    @zhenglee 不好意思,我记错了。

  • 資深大佬 : CRVV

    只取最大的一条可以不用 JOIN

    SELECT Persons.LastName, Persons.FirstName,
    (SELECT max(OrderNo) FROM Orders WHERE Orders.Id_P = Persons.Id_P) AS OrderNo
    FROM Persons;

    如果要取最大的两条,就得用 2 的方法

    也可以用 window function,MySQL 8 支持了

  • 資深大佬 : weizhen199

    等等,我是不是理解错了什么
    你要返回右表里 order by NO 最大的那条,那还要 left join 干锤子

  • 資深大佬 : zhangysh1995

    用右表 EXISTS 测试相等的值在左表是否存在,两张表 Id_P 加索引

    SELECT max(OrderNo)
    FROM (
    SELECT Orders.Id, OrderNo
    FROM Orders
    WHERE EXISTS (
    SELECT *
    FROM Persons
    WHERE Orders.ID_P = Persons.Id_P)
    ) t;

    MySQL 中 EXISTS 部分 SELECT * 不会实际取数据,对速度没影响。

  • 主 資深大佬 : rqxiao

    SELECT
    a.*,
    b.*
    FROM
    lefta a
    LEFT JOIN ( SELECT max( id ), a_id FROM leftb GROUP BY a_id ) b ON a.id = b.a_id
    差不多这样子也行了

  • 資深大佬 : alex321

    之前遇到过这个问题,牵涉到 4 张表的数据,其中 1 张表需要按照题主的情况读取。当时一时没想到啥办法,就使用了分解成两步的方式处理。
    刚才使用 #6 的方式,重新尝试了下,证实是可行的,但请注意直接查询时的性能损耗。我这里实际测试的结果,4 张表总和差不多 1000 条数据,分解方式的页面总执行时间是 0.0880s,新方式的页面总执行时间是 0.1110s 。多次执行时间相对稳定。
    基于环境:Windows 7 64Bit + IIS 7.5 + PHP 5.6.40 32Bit ( FastCGI ) + MariaDB 5.5.66 ,各表均是 MyISAM 、utf8_general_ci 和自增主键,并设置了索引,没有使用缓存。

  • 資深大佬 : xhq

    我之前用子查询好像性能有点问题,找到个只用外连接的办法,主试试
    https://stackoverflow.com/a/584442

  • 資深大佬 : JJstyle

    @zhenglee 有点问题,Bush George 没有订单,被你过滤掉了,但主还想在结果中保留他(我可能有点吹毛求疵了)

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具