我最近一直在练习一些 SQL,我有一些代码,虽然 is 正在运行,但我觉得 is 的语法非常糟糕,并不是最有效的。
我的目标是给出库存最多的电影的租借日期。正如您在下面看到的,我加入了 2 个选择,一个包含电影在库存中的频率,另一个从带有租赁 ID 的租赁表中获取日期。我认为就我目前的知识而言,这到目前为止还不错,但我目前的改进空间是我的 WHERE 语句“WHERE ciid IN”(SELECT......)。我只是修改了之前的代码以获得最大值。
我的问题是,有没有一种方法可以使 WHERE 语句更小/更高效(而不必再次评估这些语句)
我在想是否可以做一些事情,例如将整个语句的原始语句设为别名?或将 select 语句更改为类似
WHERE ciid IN (SELECT MAX(ciid) FROM amount LEFT JOIN someDate ON.....)
甚至
WHERE ciid IN (SELECT MAX(ciid) FROM aliasedTable)
是否有任何我应该遵守的最佳实践或我遗漏的任何允许我做这些事情的语法?
我先为我乱七八糟的代码道歉,我不是最有 SQL 经验的人。
SELECT film.title, rdate FROM (
(
SELECT
film_id fid1, COUNT(*) ciid
FROM inventory
GROUP BY film_id
ORDER BY ciid)amount
LEFT JOIN
(
SELECT inventory.film_id fid2, rental_date rdate
FROM rental
LEFT JOIN inventory
ON rental.inventory_id = inventory.inventory_id)someDate
ON amount.fid1 = someDate.fid2)h
LEFT JOIN film ON film.film_id = fid1
WHERE ciid IN (SELECT MAX(ciid) FROM (SELECT
film_id fid1, COUNT(inventory_id)ciid
FROM inventory
GROUP BY film_id
ORDER BY ciid)amount
JOIN
(
SELECT inventory.film_id fid2, rental_date rdate
FROM rental
LEFT JOIN inventory
ON rental.inventory_id = inventory.inventory_id)
someDate
ON amount.fid1 = someDate.fid2
);
租赁:
库存:
电影: 这里只有必要的信息
先谢谢你!
编辑:
预期输出类似于
+--------+--------+
| title | date |
+--------+--------+
| title1 | date |
| title1 | date |
| title1 | date |
| title2 | date |
| title2 | date |
| ... | ... |
+--------+--------+
手动执行一些查询以进行检查,我希望有 2000 个输出。
基本上所有代码所做的就是获取所有库存水平最高的物品,然后将它们租用的所有时间都归还。
这里也是与 ddl 的驱动器链接:https://drive.google.com/file/d/1t4if95Jsfg9LqbNkTph1h5vFMnBz9SGY/view?usp=sharing