包含别名的 Select 语句

时间:2021-02-11 09:49:47

标签: sql postgresql

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

租赁:

  • rental_id
  • 租赁日期
  • inventory_id
  • customer_id
  • 返回日期
  • staff_id
  • last_update

库存:

  • inventory_id
  • film_id
  • store_id
  • last_update

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

  • film_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

0 个答案:

没有答案
相关问题