Как найти все пары кортежей, которые согласуются по определенному атрибуту - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь написать запрос в db2 для базы данных, в которой есть книги и клиенты, которые их купили, и я должен найти пары клиентов, которые купили обычные книги.

Скажем, например, что БД называется "БД" и выглядит так:

CustomerID   Book            Cost
1            Harry Potter    12
2            SOUE             6
3            Harry Potter    12
4            Harry Potter    12
5            SOUE             6
6            SOUE             6

Я в основном пытаюсь получить результирующую таблицу, похожую на

Customer1    Customer2
1            3
1            4
2            5
2            6

Я пытался использовать group by's, но, похоже, не могу понять, правильно

Я пытался

Select book
from DB
group by book

, который однозначно дает мне все книги, но я не знаю, как бы яидти о получении клиентских пар.Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 25 июня 2018

Я бы сам присоединился согласно столбцу book.Чтобы избежать концептуальных дубликатов (например, 1-3 и 3-1), вы можете принять произвольное решение всегда отображать нижний идентификатор клиента слева:

SELECT DISTINCT a.customerid, b.customerid
FROM   mytable a
JOIN   mytable b ON a.book = b.book AND a.customerid < b.customerid

РЕДАКТИРОВАТЬ:

Чтобы ответить на вопрос в комментариях, если вы хотите отображать имена клиентов вместо идентификаторов, вам нужно присоединить таблицу клиентов к этому запросу, дважды , один раз длякаждый столбец:

SELECT DISTINCT ca.name AS customer1, cb.name AS customer2
FROM   purchases pa
JOIN   purchases pb ON pa.book = pb.book AND pa.customerid < pb.customerid
JOIN   customers ca ON pa.customer_id = ca.id
JOIN   customers cb ON pb.customer_id = cb.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...