如何找到在某个属性上都一致的所有元组对

时间:2018-06-25 20:46:14

标签: sql select db2

我正在尝试在db2中为包含书籍和购买书籍的客户的数据库编写查询,并且我要找到购买普通书籍的成对顾客。

例如,数据库被称为“ DB”,它看起来像这样

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

我尝试使用分组依据,但似乎无法正确理解

我尝试过

Select book
from DB
group by book

唯一地给了我所有的书,但是我不知道如何获得客户对。任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

我会根据book列进行自我加入。为了避免概念上的重复(例如1-3和3-1),您可以任意决定始终在左侧显示较低的客户ID:

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

编辑:

要在评论中回答问题,如果要显示客户名称而不是ID,则需要将“客户”表与该查询进行连接,两次,每列一次:< / p>

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