我有一个表"player“,如下所示: ID是主键。
这是牌桌。
+----+------------+-------+-------------+
| 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 |
+----+------------+-------+-------------+
我想找出那些没有:
备注:如果某个人在一天内玩“足球”+其他游戏,我们就把他从当天的名单中删除。只在那一天把他带走。
所以结果应该是这样,
+----+------+------+-----------+
| 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:查找具有重复值加上条件的行列出的后续问题
谢谢你的帮助!
发布于 2015-09-22 18:45:17
你应该找这个:
在这里,我们忽略了key record values (date + name)
与key record values (date + name) who played football
和key record values (date + name) who did not play football
的交集中的那些匹配。
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;
发布于 2015-09-22 16:17:18
如果我的理解是正确的,你想知道那些在那一天只参加过一项运动或者没有踢过足球的球员的日期和名字:
SELECT Date, Name
FROM player
GROUP BY Date, Name
HAVING COUNT(DISTINCT Sport) = 1
OR NOT SUM(Sport='football')
请在木琴上看到。
如果您想查看他们参加了哪些体育活动和/或获得了相关记录的ID
,可以将上述内容加入到您的player
表中:
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
请在木琴上看到。
https://stackoverflow.com/questions/32721210
复制相似问题