SQL 查詢求助:如何從兩張表中獲取唯一結(jié)果?

SQL 查詢求助:如何從兩張表中獲取唯一結(jié)果?

sql 查詢求助:如何從兩張表中查詢不重復(fù)結(jié)果

本文將解決一個(gè)常見的 sql 查詢問題,該問題涉及從兩張表中查詢不重復(fù)的結(jié)果。

問題描述:

假設(shè)我們有兩張表,a 和 b,如下所示:

a 表:

sid name
1 張三
2 李四
3 王五

b 表:

sid tracking_number
1 123
1 456
2 789
3 101

我們的目標(biāo)是查詢一條 sql 語句,以 a 表為基準(zhǔn),獲取不重復(fù)的結(jié)果,這意味著對(duì)于具有相同 sid 的記錄,我們只需要保留一行結(jié)果。

解決方案:

可以使用 left join 和子查詢來實(shí)現(xiàn)所需的結(jié)果:

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

子查詢用于從 b 表中獲取每個(gè) sid 的最大跟蹤號(hào)。然后,我們使用 left join 將此子查詢與 a 表關(guān)聯(lián),并選擇 a 表中的所有列以及 b 表中的跟蹤號(hào)。

替代方案:

對(duì)于某些數(shù)據(jù)庫,如 mysql,可以使用 group by 和 max() 函數(shù)直接在子查詢中獲取最大跟蹤號(hào):

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 表的跟蹤號(hào)和取消標(biāo)志,其中 id 是 b 表中的最大 id。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊8 分享