sql - 包含别名的选择语句
问题描述
我最近一直在练习一些 SQL,并且我有一些代码,虽然它正在运行,但我觉得它的语法非常糟糕,并不是最有效的。
我的目标是给出租用库存最多的电影的日期。正如你在下面看到的,我加入了 2 个选择,一个包含电影在库存中的频率,另一个从租赁表中获取带有租赁 ID 的日期。我认为就我目前的知识而言,到目前为止这还不错,但是我目前的改进空间是我的 WHERE 语句“WHERE ciid IN”(SELECT ......)。我只是修改了前面的代码以获得最大值。
我的问题是,有没有一种方法可以使 WHERE 语句更小/更有效(而不必再次评估语句)
我在想有可能做一些事情,比如让整个声明原始声明别名?或将选择语句更改为类似
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
);
出租:
- 出租ID
- 出租日期
- 库存ID
- 客户ID
- 归期
- 员工编号
- 最后更新
存货:
- 库存ID
- 电影编号
- store_id
- 最后更新
电影:这里只有必要的信息
- 电影编号
- 标题
先感谢您!
编辑:
预期的输出类似于
+--------+--------+
| title | date |
+--------+--------+
| title1 | date |
| title1 | date |
| title1 | date |
| title2 | date |
| title2 | date |
| ... | ... |
+--------+--------+
手动执行一些查询来检查,我预计有 2000 个输出。
基本上所有代码都在做的是获取所有库存水平最高的项目,然后返回它们被租用的所有时间。
这里也是与 ddl 的驱动器链接:https ://drive.google.com/file/d/1t4if95Jsfg9LqbNkTph1h5vFMnBz9SGY/view?usp=sharing
解决方案
推荐阅读
- ios - UITableViewCell 高度问题
- python - "...Constructor org.apache.spark.api.python.PythonAccumulatorV2 (...) does not exist" error when creating a new Sparksession, what am I doing wrong?
- ruby-on-rails - Store Rails Json response in ember
- windows - Zookeeper 后服务器不工作。我创建了一个日志文件夹并提到它的路径仍然不起作用
- html - 从父组件更新子组件中的属性?
- uipath - 自动化 Outlook 电子邮件错误加载库
- algorithm - 如果霍夫曼树的成本是 2^len,那么最好的编码是什么?
- android - Android点击图片后出现白屏,然后应用程序崩溃
- intel - 为什么 SGX 调用 ioctl 这么多次?
- javascript - 如何在 Node.js 12 中使用可选链