Mysql 从2列中选择唯一值

Mysql 从2列中选择唯一值,mysql,Mysql,我正在寻找一个SQL查询,它选择x行,其中的列最终只有唯一的值 这张桌子叫keezdrives_played 这些列称为:团队id和对手id [数据库图片][1] 它应该是这样的: [示例][2] 当团队id和对手id具有唯一值时,您可以使用如下查询: SELECT t.team_id ,o.opponents_id FROM yourTAble t INNER JOIN ( SELECT team_id,opponents_id FROM yourTAble GROUP BY

我正在寻找一个SQL查询,它选择x行,其中的列最终只有唯一的值

这张桌子叫keezdrives_played 这些列称为:团队id和对手id

[数据库图片][1]

它应该是这样的: [示例][2]


当团队id和对手id具有唯一值时,您可以使用如下查询:

SELECT t.team_id ,o.opponents_id FROM yourTAble t
INNER JOIN (
    SELECT team_id,opponents_id FROM yourTAble
    GROUP BY opponents_id
    HAVING count(*) = 1
) AS o ON o.team_id = t.team_id
GROUP BY t.team_id 
HAVING count(*) = 1;
样本

mysql> select * from yourTable;
+---------+--------------+
| team_id | opponents_id |
+---------+--------------+
|       1 |            5 |
|       1 |            6 |
|       2 |            7 |
|       2 |           80 |
|       3 |            9 |
|       4 |           11 |
|       4 |           22 |
|       8 |            5 |
+---------+--------------+
8 rows in set (0,00 sec)

mysql>     SELECT t.team_id ,o.opponents_id FROM yourTAble t
    ->     INNER JOIN (
    ->         SELECT team_id,opponents_id FROM yourTAble
    ->         GROUP BY opponents_id
    ->         HAVING count(*) = 1
    ->     ) AS o ON o.team_id = t.team_id
    ->     GROUP BY t.team_id
    ->     HAVING count(*) = 1;
+---------+--------------+
| team_id | opponents_id |
+---------+--------------+
|       3 |            9 |
+---------+--------------+
1 row in set (0,00 sec)

mysql>
SELECT  team_id,opponents_id
FROM keezdrives_played
GROUP BY CONCAT(team_id, '-', opponents_id)
HAVING count(*) = 1;
见评论

mysql> SELECT count(*) AS cnt , team_id
    -> FROM keezdrives_played
    -> GROUP BY team_id
    -> ;
+-----+---------+
| cnt | team_id |
+-----+---------+
|   4 |    2281 |
|   4 |    2282 |
|   4 |    2283 |
|   4 |    2284 |
|   4 |    2285 |
|   4 |    2286 |
+-----+---------+
6 rows in set (0,00 sec)

mysql>
再试一次

mysql> select * from yourTable;
+---------+--------------+
| team_id | opponents_id |
+---------+--------------+
|       1 |            5 |
|       1 |            6 |
|       2 |            7 |
|       2 |           80 |
|       3 |            9 |
|       4 |           11 |
|       4 |           22 |
|       8 |            5 |
+---------+--------------+
8 rows in set (0,00 sec)

mysql>     SELECT t.team_id ,o.opponents_id FROM yourTAble t
    ->     INNER JOIN (
    ->         SELECT team_id,opponents_id FROM yourTAble
    ->         GROUP BY opponents_id
    ->         HAVING count(*) = 1
    ->     ) AS o ON o.team_id = t.team_id
    ->     GROUP BY t.team_id
    ->     HAVING count(*) = 1;
+---------+--------------+
| team_id | opponents_id |
+---------+--------------+
|       3 |            9 |
+---------+--------------+
1 row in set (0,00 sec)

mysql>
SELECT  team_id,opponents_id
FROM keezdrives_played
GROUP BY CONCAT(team_id, '-', opponents_id)
HAVING count(*) = 1;
最后一次尝试

SELECT * FROM (
    SELECT t.team_id ,t.opponents_id 
    FROM keezdrives_played t
    GROUP BY t.team_id
    ) r
GROUP BY r.opponents_id;

我希望这就是你想要的

SELECT DISTINCT team_id ,opponents_id  FROM keezdrives_played where drive_id=144;

在完成这两个步骤后,使用distinct(oppents_id)。这是第一步,然后第二步是不同的第一步结果,然后你得到了你的结果。由于这个原因,您必须需要子查询。我希望如果您使用子查询,那么您将获得正确的结果将示例表作为sql转储发布,以帮助您我已将其添加到我的答案中。您可以看到团队id不是唯一的。每个条目有4行。您是否只寻找这两个字段的唯一组合?我已添加一次尝试,在这两个字段上提供所有唯一性fields@shampally-再一次-最后一次测试