在SQL中匹配对时会收到多余的行

时间:2018-06-25 17:51:15

标签: sql db2

我正在尝试匹配由第一位客户ID customers订购的购买相同商品的CID。该查询产生正确的结果,但是我得到的行数比应该收到的多大约37。

从检查的角度看,似乎有一些重复

Customer A | Customer B
Customer B | Customer A

这仅在某些比赛中发生,而在其他比赛中则没有

SELECT DISTINCT ca.name as CUSTOMERA, cb.name as CUSTOMERB
FROM customer ca, customer cb
INNER JOIN YRB_PURCHASE pur1 ON ca.cid = pur1.cid
INNER JOIN YRB_PURCHASE pur2 ON cb.cid = pur2.cid
WHERE pur1.title = pur2.title 
  AND ca.cid > cb.cid;

这是数据库中的一个小例子

Jon Stewart  | Sydney Crosby
Jake Banning | James Monroe
James Monroe | Jake Banning

不应返回最后一行,因为杰克·班宁和詹姆斯·梦露已经在第二行配对了

1 个答案:

答案 0 :(得分:0)

如果您只想让名字按字母顺序排在第二个之前的行,那就告诉SQL

SELECT DISTINCT ca.name as CUSTOMERA, cb.name as CUSTOMERB
FROM customer ca, customer cb
INNER JOIN YRB_PURCHASE pur1 ON ca.cid = pur1.cid
INNER JOIN YRB_PURCHASE pur2 ON cb.cid = pur2.cid
WHERE pur1.title = pur2.title 
  AND ca.name < cb.name;