我想编写一个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列中返回重复项,这并不理想。
我已经尝试了一些调整,但是我无法使它返回不同的值。

请解释您的答案,谢谢!

最佳答案

如果要配对,可以执行以下操作:

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 Fiddle。

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

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

关于mysql - 返回具有重复数据的不同数据对,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49226110/

10-15 19:44