如何在SQL自联接中使相同的字段不出现两次?

时间:2017-08-06 22:20:18

标签: mysql sql

我想在一个故事中做一个自我加入并建立一对客户,但我不希望同一对出现两次我使用此代码

  SELECT DISTINCT A.customer_num AS ' num1' 
                , B.customer_num AS 'num2' 
                , A.customer_name AS 'name1' 
                , B.customer_name AS 'name2' 
                , A.city AS 'city' 
             FROM tbl_customer A 
                , tbl_customer B
            WHERE A.customer_num <> B.customer_num
              AND A.city = B.city  ;

它给了我记录,但是这一对重复,这就是我得到My Result的结果,例如第1和第6对与我得到的相同 我正在使用MySQL Workbench。

1 个答案:

答案 0 :(得分:2)

由于自联接的where条件是对称(即A.customer_num <> B.customer_num),因此每对在输出中会出现两次。哪条记录为AB无关紧要,因此将条件切换为非对称将解决问题。

当你在它时,切换到使用ANSI连接;您不再需要DISTINCT

SELECT
    A.customer_num AS 'num1'
,   B.customer_num AS 'num2'
,   A.customer_name AS 'name1'
,   B.customer_name AS 'name2' ,
A.city AS 'city' 
FROM tbl_customer A -- It does not matter if you use < or > below
JOIN tbl_customer B ON A.customer_num > B.customer_num AND A.city = B.city