我有一个表cust_info
,其中有列cust_id
和cust_email
。在这里,同一位客户可以拥有多个电子邮件ID。
现在,我正在尝试查询每个cust_id
必须映射到电子邮件的两种不同组合的查询。顺序无关紧要。
我的输入表:
cust_id cust_email
1001 sample1001_1@email.com
1001 sample1001_2@email.com
1001 sample1001_3@email.com
1001 sample1001_4@email.com
1002 sample1002_1@email.com
1002 sample1002_2@email.com
1002 sample1002_3@email.com
预期输出:
cust_id cust_email_1 cust_email_2
1001 sample1001_1@email.com sample1001_2@email.com
1001 sample1001_1@email.com sample1001_3@email.com
1001 sample1001_1@email.com sample1001_4@email.com
1001 sample1001_2@email.com sample1001_3@email.com
1001 sample1001_2@email.com sample1001_4@email.com
1001 sample1001_3@email.com sample1001_4@email.com
1002 sample1002_2@email.com sample1002_1@email.com
1002 sample1002_2@email.com sample1002_3@email.com
1002 sample1002_3@email.com sample1002_1@email.com
我尝试使用内部联接:
SELECT c1.cust_id, c1.cust_email, c2.cust_email
FROM cust_info c1
INNER JOIN cust_info c2
ON c1.cust_id = c2.cust_id AND c1.cust_email != c2.cust_email;
但是对于上面尝试过的查询,我得到的是置换而不是不需要的组合。 例如:
1001 sample1001_1@email.com sample1001_2@email.com
1001 sample1001_2@email.com sample1001_1@email.com
我已经探讨了类似的问题here,但是由于该查询使用了日期列,因此使用了比较运算符来过滤排列。但就我而言,该列是一个字符串。
答案 0 :(得分:2)
更改连接条件以使用<
不等式:
SELECT
c1.cust_id,
c1.cust_email,
c2.cust_email
FROM cust_info c1
INNER JOIN cust_info c2
ON c1.cust_id = c2.cust_id AND
c1.cust_email < c2.cust_email;
这应该可以防止您目前看到的重复对。