如果“曲目”表中A的行少于“专辑”表中报告的A的曲目数,则专辑Z缺少曲目。对于每首没有丢失曲目的专辑,请找到其总运行秒数。
答案 0 :(得分:1)
由于这是一个练习,所以我不想仅仅通过给您最终的解决方案而完全破坏学习效果。我会尽力指导您。
您的问题是WHERE
子句
WHERE albums.tracks >= tracks.number
我想您打算实现“为每张专辑都保留曲目,...”的要求。
但是,条件并非如此;而是排除了数量超过专辑的曲目数量的曲目。
您需要类似以下内容:“与专辑相关的曲目数量等于(大于或等于)专辑曲目数量”。
换句话说:WHERE count(tracks.*) >= albums.tracks
。 (“与专辑相关”部分由加入条件实现-不包括与专辑无关的曲目。)
看到了吗?秘诀通常只是将自然语言的句子翻译成SQL。
现在我们面临一个问题,因为我们无法在count
子句中拥有像WHERE
这样的聚合函数。这是因为WHERE
是在形成这些组的 GROUP BY
之前处理的。
对我们来说幸运的是,有一种“ WHERE
子句”是在分组后进行处理的,即HAVING
。
其余的留给您:^)