Выберите уникальные пары в самостоятельном соединении - PullRequest
19 голосов
/ 18 сентября 2011

Я пытаюсь написать простой запрос в sqlite с самостоятельным соединением.Я хочу, чтобы все пары идентификаторов продуктов, которые имеют одинаковую стоимость, но я хочу, чтобы уникальные пары (т.е. не перечислять одну и ту же пару дважды, даже в другом порядке).Вот что у меня есть:

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;

Как избавиться от дубликатов пар?Есть идеи?

Буду признателен за вашу помощь!

1 Ответ

40 голосов
/ 18 сентября 2011

Измените != на < в предложении WHERE, чтобы всегда указывать наименьший идентификатор:

WHERE b1.Id < b2.Id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...