我正在尝试查找在不使用限制的情况下租借次数最多的电影。我正在尝试使用以下查询:
SELECT f.title, f.film_id
FROM film f
JOIN inventory i ON f.film_id = i.film_id
JOIN rental r ON r.inventory_id = i.inventory_id
GROUP BY f.film_id
HAVING COUNT(r.rental_id) = MAX(
SELECT COUNT(r2.rental_id)
FROM rental r2, inventory i2
WHERE i2.inventory_id = r2.inventory_id
GROUP BY i2.film_id);
但是 mySQL 告诉我这里某处有语法错误 SELECT COUNT(r2.rental_id)
FROM rental r2, inventory
但是,当我独立运行子查询时,它会返回预期的表。我做错了什么吗?
相关数据库模式:
film(film id, title, description, release year, language id, original language id, rental duration, rental rate, length, replacement cost, rating, special features, last update)
inventory(inventory id, film id, store id, last update)
rental(rental id, rental date, inventory id, customer id, return date, staff id, last update)
最佳答案
您不能对结果集使用 MAX()
,但您可以使用
someValue >= ALL (subquery)
实现您正在尝试的目标,因为 ALL
要求前面的运算符对于集合中的所有值都为真。
试试这个:
SELECT f.title, f.film_id
FROM film f
JOIN inventory i ON f.film_id = i.film_id
JOIN rental r ON r.inventory_id = i.inventory_id
GROUP BY f.film_id
HAVING COUNT(r.rental_id) >= ALL (
SELECT COUNT(r2.rental_id)
FROM rental r2, inventory i2
WHERE i2.inventory_id = r2.inventory_id
GROUP BY i2.film_id);
关于mySQL 在具有有效语法的子查询上给出语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19372324/