在自联接中选择唯一对

问题描述 投票:19回答:1

我正在尝试使用自联接在sqlite中编写一个简单的查询。我想要具有相同成本的产品的所有ID对,但我想要唯一的对(即,即使以不同的顺序也不要两次列出相同的对)。这是我得到的:

SELECT b1.Id, b2.Id
FROM Basic AS b1
LEFT JOIN Basic AS b2
ON b1.cost = b2.cost
WHERE b1.Id != b2.Id
AND b1.Cost = 5;

所以我得到了类似的东西

23 | 101
23 | 205
24 | 103
101 | 23 <-- Duplicate!

我尝试了DISTINCT和GROUP BY的不同组合,但我仍然得到重复的对:

我尝过类似的东西

SELECT DISTINCT bp1.Id,bp2.Id ......

&... = 5 GROUP BY bp1.Id,bp2.Id;

如何摆脱重复对?有任何想法吗?

我将非常感谢你的帮助!

sql sqlite
1个回答
40
投票

在WHERE子句中将!=更改为<,以确保始终存在最低ID:

WHERE b1.Id < b2.Id
© www.soinside.com 2019 - 2024. All rights reserved.