2017-08-06 4 views
1

私は自己結合物語で、顧客のペアを作りをしたいが、私はそれは私に、レコードが、ペアを与える二回私はこのコード同じフィールドをSQL self joinに2回表示しない方法は?

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 ; 

を使用しています表示されるように同じペアを望んでいません私は を取得し、私はMySQLのワークベンチを使用しているものと同じであるなど、1と6番目のペアのようなMy Resultを得る結果です。

答えて

2

自己結合の条件がであるため、対称式(つまりA.customer_num <> B.customer_num)の場合、各ペアは出力に2回表示されます。 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 
+0

私はまだDISTINCTが必要ですか? @dasblinkenlight –

+0

@HarryKashyapいいえ、あなたは 'DISTINCT'節を削除できます。 – dasblinkenlight

関連する問題