mysql - 如何获取同一个表的行之间所有可能的组合

标签 mysql sql

我需要来自同一个表的行的组合。是否可以 ? 这是我的 table :

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 |

或者

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

最佳答案

您需要制作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

关于mysql - 如何获取同一个表的行之间所有可能的组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40212606/

相关文章:

php - 关闭 Magento 集合或条件

php - 如何显示数据库中两个用户之间的相互关系?

MySQL 查询聚合多个条件下的术语

mysql - 当我有平局时,对 SQL 查询结果进行排序时出现问题

sql - 按ID选择多行,有没有比WHERE IN更快的方法

mysql - 获得 "foreign key constraint fails"即使我有 "on delete cascade"

mysql - 将匹配的字符串移动到 MySQL 中的末尾

Java、SQL 数据库连接

mysql - 在 MySQL 中搜索 LaTeX 文本

php - having 子句中的未知聚合列