2017-04-23 14 views
1

私はMySQLを使用してチームの組み合わせを探しています。SQLの2列のデータからユニークセットをフィルタリングする方法

mysql> SELECT * FROM members; 
+----------+-------+ 
| IDmember | Name | 
+----------+-------+ 
|  1 | John | 
|  2 | Harry | 
|  3 | Kolb | 
+----------+-------+ 

は、この適用:

SELECT t1.IDmember AS ID1 
    , t2.IDmember AS ID2 
    , t1.Name 
    , t2.Name 
    FROM members t1 
    JOIN members t2 
WHERE t1.IDmember != t2.IDmember; 

をしかし、WHERE条件はまだ(2,1)と(1,2)のように、重複したチームを回避するために不足しています。 (3,2)および(2,3)。 (1,3)および(3,1):

+-----+-----+-------+-------+ 
| ID1 | ID2 | Name | Name | 
+-----+-----+-------+-------+ 
| 2 | 1 | Harry | John | 
| 3 | 1 | Kolb | John | 
| 1 | 2 | John | Harry | 
| 3 | 2 | Kolb | Harry | 
| 1 | 3 | John | Kolb | 
| 2 | 3 | Harry | Kolb | 
+-----+-----+-------+-------+ 

このクエリを改善するにはどうすればよいですか?

+0

使用 't1.IDmember T2となります.IDmember'は1つの組み合わせのみを取得します。 –

答えて

1

あなたが近づいている:ある

SELECT t1.IDmember AS ID1, t2.IDmember AS ID2, t1.Name, t2.Name 
FROM members t1 INNER JOIN 
    members t2 
    ON t1.IDmember < t2.IDmember; 

は、<!=を交換してください。

編集注:INNER JOINを使用する場合は、ON句を含めます。条件をWHEREに入れた場合は、CROSS JOINを使用します。私はMySQLが節のないINNER JOINを許す唯一のデータベースだと思います。ここで

1

は私がやるだろうと何:

SELECT 
    t1.IDmember AS ID1, 
    t2.IDmember AS ID2, 
    t1.Name, 
    t2.Name 
FROM 
    members t1 
    CROSS JOIN members t2 
WHERE 
    t1.IDmember < t2.IDmember; 

下IDを持つメンバーが "プレイヤー1"

関連する問題