我正在使用 MySQL 寻找可能的团队组合。
mysql> SELECT * FROM members;
+----------+-------+
| IDmember | Name |
+----------+-------+
| 1 | John |
| 2 | Harry |
| 3 | Kolb |
+----------+-------+
然后应用这个:
SELECT t1.IDmember AS ID1
, t2.IDmember AS ID2
, t1.Name
, t2.Name
FROM members t1
JOIN members t2
WHERE t1.IDmember != t2.IDmember;
但是仍然缺少 WHERE 条件以避免重复的组,例如 (2,1) 和 (1,2); (3,2) 和 (2,3); (1,3) 和 (3,1):
+-----+-----+-------+-------+
| ID1 | ID2 | Name | Name |
+-----+-----+-------+-------+
| 2 | 1 | Harry | John |
| 3 | 1 | Kolb | John |
| 1 | 2 | John | Harry |
| 3 | 2 | Kolb | Harry |
| 1 | 3 | John | Kolb |
| 2 | 3 | Harry | Kolb |
+-----+-----+-------+-------+
我怎样才能改进这个查询?
最佳答案
你很接近:
SELECT t1.IDmember AS ID1, t2.IDmember AS ID2, t1.Name, t2.Name
FROM members t1 INNER JOIN
members t2
ON t1.IDmember < t2.IDmember;
即替换!=
与 <
.
编辑说明:如果您使用 INNER JOIN
, 然后包括 ON
条款。如果您将条件放在 WHERE
中, 然后使用 CROSS JOIN
.我认为 MySQL 是唯一允许 INNER JOIN
的数据库没有 ON
条款。
关于mysql - 如何从 SQL 中的两列数据中过滤唯一集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43571826/