[英]How to filter uniq sets from two columns of data in SQL
我正在使用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是唯一一个不带ON
子句的允许INNER JOIN
数据库。
这是我要做的:
SELECT
t1.IDmember AS ID1,
t2.IDmember AS ID2,
t1.Name,
t2.Name
FROM
members t1
CROSS JOIN members t2
WHERE
t1.IDmember < t2.IDmember;
ID较低的成员将是“玩家1”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.