1

我正在尝试找到没有使用限制的租借最多的电影。我正在尝试使用以下查询:

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)
4

2 回答 2

1

您不能使用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);
于 2013-10-15T04:19:35.523 回答
0

我没有要测试的数据库,但这应该可以:

编辑为 LIMIT 1 而不是 MySQL 的 SELECT TOP 1)

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) = (SELECT COUNT(r2.rental_id)
                              FROM rental r2, inventory i2
                              WHERE i2.inventory_id = r2.inventory_id
                              GROUP BY i2.film_id
                              ORDER BY COUNT(r2.rental_id) desc
                              LIMIT 1) s                             
于 2013-10-15T02:41:04.430 回答