首页 > 解决方案 > 包含别名的选择语句

问题描述

我最近一直在练习一些 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
                  );

出租:

存货:

电影:这里只有必要的信息

先感谢您!

编辑:

预期的输出类似于

+--------+--------+
| title  | date   |
+--------+--------+
| title1 |   date |
| title1 |   date |
| title1 |   date |
| title2 |   date |
| title2 |   date |
| ...    |   ...  |
+--------+--------+

手动执行一些查询来检查,我预计有 2000 个输出。

基本上所有代码都在做的是获取所有库存水平最高的项目,然后返回它们被租用的所有时间。

这里也是与 ddl 的驱动器链接:https ://drive.google.com/file/d/1t4if95Jsfg9LqbNkTph1h5vFMnBz9SGY/view?usp=sharing

标签: sqlpostgresql

解决方案


推荐阅读