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

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

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

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

问题描述:

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

a 表:

sid name
1 张三
2 李四
3 王五

b 表:

sid tracking_number
1 123
1 456
2 789
3 101

我们的目标是查询一条 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。

以上就是SQL 查询求助:如何从两张表中获取唯一结果?的详细内容,更多请关注www.sxiaw.com其它相关文章!