sql查询求救

a表
image.png

b表
image.png

如图两张表,我想查询到以a表为基准,无重复的结果。sql语句怎么写呢?
我目前是
SELECT DISTINCT a.* , b.tracking_number left join b on a.sid=b.sid
因为跟踪号不一样,所以就会出现2个张三,我需要根据sid只保留1个可以吗?怎么实现?不用管忽略掉的tracking_number是哪一个
image.png

阅读 1.7k
1 个回答
select *
from a
left join (
  select sid, max(tracking_number)
  from b
  group by sid
) b
on a.sid = b.sid

有些数据库不需要 max(),直接给 tracking_number 就行。SQLite 可以,MySQL 可能得行,SQL Server 我记得很老的版本是不行的,现在不知道行不行了。

我在 MySQL 上测试的不需要使用函数 (ver: 8.0)

select *
from a
left join (
    select id, sid, tracking_number, is_cancel
    from b
    group by sid
) b on a.sid = b.sid
;

如果需要使用函数的情况,在主键上用,然后多关联 b 一次把其他信息带出来

select
    a.*,
    b.tracking_number,
    b.is_cancel 
from a
left join (
    select max(id) id, sid
    from b
    group by sid
) x on a.sid = x.sid
left join b on x.id = b.id
;
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题