如何在同一个表的行之间获得所有可能的组合

时间:2016-10-24 07:13:41

标签: mysql sql

我需要组合同一个表中的行。可能吗 ? 这是我的表:

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 |

2 个答案:

答案 0 :(得分:2)

您需要在表CROSS JOIN的两个实例之间taA & 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 :(得分:0)

自我加入:

SELECT t1.name, t2.name
FROM ta t1
    JOIN ta t2 ON t1.id < t2.id