繁体   English   中英

如何从SQL中的两列数据中过滤uniq集

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM