fan(*IDfan*,name,surname)
match(*IDmatch*, type_of_competition, teamA, teamB, date, scoreA, scoreB)
booking(*IDfan,IDmatch*,price)...
*name* : name is the primary key `
例如。
粉丝:
IDfan Name Surname
---------------------
1 | A |A
2 | B |B
3 | C |C
匹配:
IDmatch type teamA teamB date...
----------------------------------------------------
1 | champions |Juve |Barcellona |01/10/17
2 | league |Milan |Real |02/11/17
3 | TIM cup |Inter |Napoli |03/12/17
预订:
IDfan IDmatch price
---------------------
1 | 1 |5
1 | 2 |6
1 | 3 |7
2 |1 |8
2 |1 |8
2 |1 |8
3 |2 |5
3 |3 |10
早上好,考虑到球迷可以为一场比赛购买更多门票,我不知道如何选择观看所有比赛的球迷。例如,应用于上述数据库的脚本的结果必须是:
IDfan 姓名
<小时/>1 | A |A
最佳答案
已编辑
在 booking
表中,相同值的行出现 3 次,这很奇怪。
IDfan IDmatch price
---------------------
2 |1 |8
2 |1 |8
2 |1 |8
假设三次出现没有错, 这将是正确的答案(未经测试)。
SELECT fan.*
FROM (SELECT DISTINCT IDfan, IDmatch
FROM booking) AS distinct_booking
JOIN fan ON distinct_booking.IDfan = fan.IDfan
GROUP BY fan.IDfan, fan.Name, fan.Surname
HAVING COUNT(*) = (SELECT COUNT(*) FROM match)
;
另一方面,假设booking
表具有IDfan
和IDmatch
的唯一约束,则三次出现是错误的,
尝试这个。经过测试并有效
SELECT fan.*
FROM booking
JOIN fan ON booking.IDfan = fan.IDfan
GROUP BY fan.IDfan, fan.Name, fan.Surname
HAVING COUNT(*) = (SELECT COUNT(*) FROM match)
;
对于 mysql,这也可以工作(已测试)
SELECT fan.*
FROM booking
JOIN fan ON booking.IDfan = fan.IDfan
GROUP BY fan.IDfan
HAVING COUNT(*) = (SELECT COUNT(*) FROM match)
;
--
对此评论的解释。
Can you explain me why you did this: GROUP BY fan.IDfan, fan.Name, fan.Surname ?
某些数据库有一个规则:SELECT
中的列必须位于 GROUP BY
子句中。
为了获取 IDfan Name Surname,我编写了 GROUP BY fan.IDfan, fan.Name, fan.Surname
但mysql不是这样,如果主键在GROUP BY
中就可以了。
所以,我再次阅读了你的问题,我意识到你使用mysql,那么这也适用于mysql。
SELECT fan.*
FROM booking
JOIN fan ON booking.IDfan = fan.IDfan
GROUP BY fan.IDfan
HAVING COUNT(*) = (SELECT COUNT(*) FROM match)
;
关于MYSQL获取观看过所有足球比赛的人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48135647/