MYSQL获取观看过所有足球比赛的人

标签 mysql

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表具有IDfanIDmatch的唯一约束,则三次出现是错误的, 尝试这个。经过测试并有效

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/

相关文章:

mysql - 多次加入同一个表

php - MySQL "in-where"很慢?

python - 如何正确打开和关闭mysql连接

javascript - Sequelize MySQL更新值从其他表复制

MySQL:SQL Server HierarchyId 数据类型的替代解决方案

mysql - Docker,同一网络上的多个 MySQL 容器 - 间歇性连接问题

php - 通过url中的特定字段从MySQL数据库表中获取数据

MySQL 数据库 SQL 与 Excel 数据没有结果

php - 如何存储永久 boolean 标志?

php - 如果 MYSQL 中存在则更新用户分数