我有这个查询:
select count(name) as nr
from team where city='ny' and name=ANY
(select teamName from contract where playerCode=ANY
(select code from player where name='X' and surname='Y'));
我不明白为什么 count() 函数即使没有不同的子句也不计算重复项。
这些是表格:
Player(code, name, surname)
Contract(id, playerCode, teamName, year)
Team(name, city)
有了这个完整性约束:
Contract(playerCode)-->Player(code)
Contract(teamName)-->Team(name)
该查询提取纽约市与名为 X,Y 的球员签订契约(Contract)的球队数量。 谢谢。
最佳答案
您的查询将计算重复项。我的猜测是您期望子查询中的多个匹配项出现重复项。但是,子查询不是 JOIN,因此不会重复 team
的结果。表,无论子查询中有多少匹配项。
team
中的每一行表将只有 WHERE
条件评估一次,并将根据这些条件是否满足而被包含(一次)。
假设 team.name
中没有 NULL 值,如果你SELECT COUNT(name), COUNT(*)
两个字段应具有相同的值。
关于MySQL COUNT() 和重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38726893/