【问题标题】:join without a join in PostgresSQL在 PostgresQL 中加入而不加入
【发布时间】:2020-10-15 16:06:39
【问题描述】:

我有以下psql 查询的代码,我试图理解(问题已简化):

select id, time, t.type, t.sub_type from TABLE_A r,TABLE_B t,TABLE_C l where r.type = t.type and t.type = l.type

它和做一个连接是一样的,还是我在这里遗漏了什么?

【问题讨论】:

  • 这是写JOIN的过时方式,应该被替换。
  • 请使用现代 JOIN 语法,而不是 1989 年(兰巴达年)的旧语法。

标签: sql postgresql


【解决方案1】:

你正在做一个老式的隐式加入。这是 ANSI-92 SQL 标准之前使用的语法,该标准开始推荐像这个版本的查询这样的显式连接:

select id, time, t.type, t.sub_type    -- but please always use aliases here
from TABLE_A r
inner join TABLE_B t
    on r.type = t.type
inner join TABLE_C l
    on t.type = l.type;

以上版本被认为是表达逻辑的“正确”方式。显式连接解决了隐式连接固有的许多问题。隐式连接将连接逻辑和过滤条件放在同一个 WHERE 子句中,这可能会导致难以梳理那里发生的事情。此外,使用隐式语法表达左/右/内/交叉连接更加困难,不同的供应商有时有不同的语法。目前,所有主要 SQL 供应商的 ANSI-92 显式连接几乎相同。

【讨论】:

    猜你喜欢
    • 2017-10-11
    • 1970-01-01
    • 2022-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 1970-01-01
    相关资源
    最近更新 更多