首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysql:删除带有条件的重复值的行(重复列)

mysql:删除带有条件的重复值的行(重复列)
EN

Stack Overflow用户
提问于 2015-09-22 15:42:27
回答 2查看 72关注 0票数 0

我有一个表"player“,如下所示: ID是主键。

  • date =他们玩的日期(只玩一个月,也可以从1到31)
  • 名字=玩家的名字
  • 体育=体育运动

这是牌桌。

代码语言:javascript
运行
复制
+----+------------+-------+-------------+
| ID | Date       | Name  | Sport       |
+----+------------+-------+-------------+
|  1 |          1 | A     | football    |
|  2 |          1 | A     | soccer      |
|  3 |          3 | A     | tennis      |
|  4 |          2 | B     | tennis      |
|  5 |          2 | B     | football    |
|  6 |          1 | C     | basketball  |
|  7 |          1 | C     | tennis      |
|  8 |          1 | C     | fishing     |
|  9 |          4 | D     | football    |
+----+------------+-------+-------------+

我想找出那些没有:

  • 一天内练习“足球”+其他运动。

备注:如果某个人在一天内玩“足球”+其他游戏,我们就把他从当天的名单中删除。只在那一天把他带走。

所以结果应该是这样,

代码语言:javascript
运行
复制
+----+------+------+-----------+
| ID | Date | Name |  Sport    |
+----+------+------+-----------+
|  3 |    3 | A    | tennis    |
|  6 |    1 | C    | basketball|
|  7 |    1 | C    | tennis    |
|  8 |    1 | C    | fishing   |
|  9 |    4 | D    | football  |
+----+------+------+-----------+

这是mysql:查找具有重复值加上条件的行列出的后续问题

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-22 18:45:17

你应该找这个:

在这里,我们忽略了key record values (date + name)key record values (date + name) who played footballkey record values (date + name) who did not play football的交集中的那些匹配。

代码语言:javascript
运行
复制
SELECT 
    p1.*
FROM
    player p1
        LEFT JOIN
    (SELECT 
        pnfb.*
    FROM
        (SELECT 
        date, name
    FROM
        player
    WHERE
        sport <> 'football') pnfb
    JOIN (SELECT 
        date, name
    FROM
        player
    WHERE
        sport = 'football') pfb ON (pnfb.date = pfb.date
        AND pnfb.name = pfb.name)) p2 ON (p1.date = p2.date AND p1.name = p2.name)
WHERE
    p2.date IS NULL;
票数 1
EN

Stack Overflow用户

发布于 2015-09-22 16:17:18

如果我的理解是正确的,你想知道那些在那一天只参加过一项运动或者没有踢过足球的球员的日期和名字:

代码语言:javascript
运行
复制
SELECT   Date, Name
FROM     player
GROUP BY Date, Name
HAVING   COUNT(DISTINCT Sport) = 1
      OR NOT SUM(Sport='football')

请在木琴上看到。

如果您想查看他们参加了哪些体育活动和/或获得了相关记录的ID,可以将上述内容加入到您的player表中:

代码语言:javascript
运行
复制
SELECT * FROM player NATURAL JOIN (
  SELECT   Date, Name
  FROM     player
  GROUP BY Date, Name
  HAVING   COUNT(DISTINCT Sport) = 1
        OR NOT SUM(Sport='football')
) t

请在木琴上看到。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32721210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档