2016-10-24 9 views
1

同じテーブルの行の組み合わせが必要です。出来ますか ?ここ は私のテーブルです:同じテーブルの行間のすべての可能な組み合わせを取得する方法

CREATE TABLE `ta` (
`id` INT(11) NOT NULL AUTO_INCREMENT, 
`name` VARCHAR(50) NULL DEFAULT NULL, 
PRIMARY KEY (`id`) 
) 


INSERT INTO `ta` (`id`, `name`) VALUES 
(1, 'ta1'), 
(2, 'ta2'), 
(3, 'ta3'), 
(4, 'ta4'); 

結果は以下のようにする必要があります:

| ta1 | ta2 | 
| ta1 | ta3 | 
| ta1 | ta4 | 
| ta2 | ta3 | 
| ta2 | ta4 | 
| ta3 | ta4 | 

OR

| ta1 | ta2 | 
| ta1 | ta3 | 
| ta1 | ta4 | 
| ta2 | ta1 | 
| ta2 | ta3 | 
| ta2 | ta4 | 
| ta3 | ta1 | 
| ta3 | ta2 | 
| ta3 | ta4 | 
| ta4 | ta1 | 
| ta4 | ta2 | 
| ta4 | ta3 | 
+0

自己に参加ください x.name、y.nameからSELECT x.id rocks

答えて

2

あなたはtaA & B

言うあなたのテーブルの2つのインスタンス間で CROSS JOINを作成する必要があります
SELECT 
A.name, 
B.name FROM ta A CROSS JOIN ta B 
WHERE A.id <> B.id 

See Demo

注:

あなたが<a,b> and <b,a>エントリを考慮すれば、異なるその後、上記のクエリでは十分であろう。

そして、あなたは順序ではなく、以下を採用し、その後(すなわち<a,b> is equal to <b,a>)問題ではないペアごとに1つのレコードのみたい場合:

SELECT 
A.name, 
B.name FROM ta A CROSS JOIN ta B 
WHERE A.id < B.id 
+1

にお問い合わせください。@ 1000111ありがとうございます。 –

0

は自己を実行してくださいに参加:

SELECT t1.name, t2.name 
FROM ta t1 
    JOIN ta t2 ON t1.id < t2.id 
関連する問題