我想在一个故事中做一个自我加入并建立一对客户,但我不希望同一对出现两次我使用此代码
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。
答案 0 :(得分:2)
由于自联接的where
条件是对称(即A.customer_num <> B.customer_num
),因此每对在输出中会出现两次。哪条记录为A
或B
无关紧要,因此将条件切换为非对称将解决问题。
当你在它时,切换到使用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