2016-10-24 40 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

做自我加盟 SELECT x.name,y.name FROM ta x JOIN ta y ON x.id rocks

回答

2

你需要让你的表的两个实例之间CROSS JOINtaA & B

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>)然后采用替代下面只有一条记录:

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

Thanks @ 1000111。 –

0

做一个自我联接:

SELECT t1.name, t2.name 
FROM ta t1 
    JOIN ta t2 ON t1.id < t2.id 
相关问题