返回包含重复数据的不同数据对

时间:2018-03-11 23:13:03

标签: mysql sql

我想写一个SQL查询,它返回共享同一个城市的一对人员列表,没有重复。 (这只是测试数据,因为真正的数据库是非常随机的,并且会使问题混乱)。 样本数据:

Person | City
Tom    | New York
Kenny  | Washington
Katja  | New York
Kerry  | New York
Dan    | Washington

Sample return:
Tom, Katja
Kenny, Dan
Kerry,

我的直觉如下:

SELECT DISTINCT a.person, b.person
FROM People AS a, People AS b
WHERE a.city = b.city;

然而,这会在b列中返回重复项,这并不理想。 我尝试了一些调整,但我不能让它返回不同的值。

请解释一下你的答案,谢谢你!

1 个答案:

答案 0 :(得分:1)

如果你想要配对,你可以这样做:

SELECT p1.person, p2.person
FROM People p1 LEFT JOIN
     People p2
     ON p1.city = p2.city AND p1.person <> p2.person
WHERE p2.person IS NULL OR p1.person < p2.person;

LEFT JOIN确保包含所有人,即使没有匹配项。

Here是一个SQL小提琴。

您可能会发现为每个城市生成列表更方便:

select p.city, group_concat(p.person order by p.person)
from people p
group by p.city;