mysql - 如何尽可能简单地编写查询来获得此结果

标签 mysql

我有这个行集:

ID player_id team_id       created
1      2        1    2011-05-03 19:07:03     
2      3        1    2011-05-05 12:13:18
3      2        5    2011-05-07 18:12:54

我会选择属于 team_id=1 的玩家,但从这个结果中我想删除player_id=2,因为该玩家实际上已经移动并且他在第 5 队中比赛(在 team_id=1 中不再存在)。所以最终的结果将是:

ID player_id team_id       created
2      3        1    2011-05-05 12:13:18

如何编写查询来执行此操作?我可以将其写在单个查询中吗?怎么办?

问候

最佳答案

基本上,您可以首先选择曾经属于某个团队的每个人,然后删除在加入相关团队后创建的另一个团队的条目的任何人。此查询特别允许您仅在一处更改 team_id,并且如果您想检查多个团队,则可以获得正确的结果。

SELECT
    t1.*
FROM
    my_table t1
WHERE
    t1.team_id = 1
AND
    NOT EXISTS(
        SELECT
            t2.id
        FROM
            my_table t2
        WHERE
            t2.player_id = t1.player_id
        AND
            t2.team_id != t1.team_id
        AND
            t2.created > t1.created);

关于mysql - 如何尽可能简单地编写查询来获得此结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6332701/

相关文章:

mysql - 复杂的mySQL 两表查询

php - 无法将数据保存到 mysql(按保存按钮后页面变为空白)

php - 作为连接的结果获取 PHP MySQL PDO 列表名

c# - 将数据库 A 与从数据库 B(Web 服务)检索的 xml 数据同步,并插入、更新、删除缺失的列

mysql。插入、更新和位置

php - 在 Facebook 删除请求 PHP 中使用变量作为帖子 ID

php - 上传 PDF 文件 PHP

php - 理解获取mysql数据的概念

php+socket.io+mysql - 像聊天一样的 Messenger

php - mysql 版本 5.1.73 不支持 JSON_CONTAINS