我有这个行集:
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/