我需要组合同一个表中的行。可能吗 ? 这是我的表:
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 :(得分:2)
您需要在表CROSS JOIN
的两个实例之间ta
说A & B
SELECT
A.name,
B.name FROM ta A CROSS JOIN ta B
WHERE A.id <> B.id
注意:强>
如果您以不同方式考虑<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