将单个文本列拆分为所有可能组合的两列

时间:2019-12-16 09:27:02

标签: mysql sql

我有一个表cust_info,其中有列cust_idcust_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,但是由于该查询使用了日期列,因此使用了比较运算符来过滤排列。但就我而言,该列是一个字符串。

1 个答案:

答案 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;

这应该可以防止您目前看到的重复对。

相关问题