首页 > 文章列表 > SQL 查询求助:如何从两张表中获取唯一结果?

SQL 查询求助:如何从两张表中获取唯一结果?

275 2024-12-07

SQL 查询求助:如何从两张表中获取唯一结果?

sql 查询求助:如何从两张表中查询不重复结果

本文将解决一个常见的 sql 查询问题,该问题涉及从两张表中查询不重复的结果。

问题描述:

假设我们有两张表,a 和 b,如下所示:

a 表:

sidname
1张三
2李四
3王五

b 表:

sidtracking_number
1123
1456
2789
3101

我们的目标是查询一条 sql 语句,以 a 表为基准,获取不重复的结果,这意味着对于具有相同 sid 的记录,我们只需要保留一行结果。

解决方案:

可以使用 left join 和子查询来实现所需的结果:

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

子查询用于从 b 表中获取每个 sid 的最大跟踪号。然后,我们使用 left join 将此子查询与 a 表关联,并选择 a 表中的所有列以及 b 表中的跟踪号。

替代方案:

对于某些数据库,如 mysql,可以使用 group by 和 max() 函数直接在子查询中获取最大跟踪号:

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

如果主键位于 b 表中,我们还可以使用以下查询:

SELECT
    a.*,
    b.tracking_number,
    b.is_cancel 
FROM a
LEFT JOIN b ON a.sid = b.sid
WHERE b.id IN (
    SELECT MAX(id) FROM b GROUP BY sid
);

此查询将选择 a 表中的所有行,以及来自 b 表的跟踪号和取消标志,其中 id 是 b 表中的最大 id。

来源:1730418488