我想写一个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列中返回重复项,这并不理想。 我尝试了一些调整,但我不能让它返回不同的值。
请解释一下你的答案,谢谢你!
答案 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;