postgresql:from语句中的几个表

Posted

技术标签:

【中文标题】postgresql:from语句中的几个表【英文标题】:postgresql: several tables in from statement 【发布时间】:2021-02-06 07:45:42 【问题描述】:

我见过这样的查询:

SELECT a.city
FROM airports a
EXCEPT
SELECT arr.city
FROM airports dep, airports arr, flights f
WHERE dep.city = 'Москва'
AND f.departure_airport = dep.airport_code
AND f.arrival_airport = arr.airport_code;

我不明白FROM airports dep, airports arr, flights f 部分 - 它是用于完全连接的某种语法糖吗?

【问题讨论】:

这是旧的加入方式(inner join),一般不建议这样做 【参考方案1】:

这些是隐式内部连接。表名在from子句中枚举,连接条件在where子句中。

这用标准的显式连接表示起来要简单得多:

SELECT arr.city
FROM airports dep
INNER JOIN airports arr ON f.arrival_airport = arr.airport_code
INNER JOIN flights f ON f.departure_airport = dep.airport_code
WHERE dep.city = 'Москва'

旁注:据我了解,您可以使用not exists 而不是except 来表达整个查询:

select a.city
from airports a
where not exists (
    select 1
    from flights f
    inner join airports adep on f.departure_airport = adep.airport_code
    where adep.city = 'Москва' and f.arrival_airport = a.airport_code
)

【讨论】:

以上是关于postgresql:from语句中的几个表的主要内容,如果未能解决你的问题,请参考以下文章

sql数据库中,如何快速找数据量最大的几个表

以太坊合并开始,了解 PoS 中的几个重要概念

以太坊合并开始,了解 PoS 中的几个重要概念

postgresql Insert插入的几个报错

如何创建一个脚本来合并另一个表中的几个表?

在 PostgreSQL 中使用 COPY FROM 命令在多个表中插入