gpt4 book ai didi

sql - postgresql:来自列表中的非表表达式?

转载 作者:行者123 更新时间:2023-12-03 23:42:35 24 4
gpt4 key购买 nike

假设我有一张 table

id | description
-----------------
1 | aaa
2 | bbb
不小心写了
select * from the_table, upper(description)
并且对得到结果感到非常惊讶
id | description | upper
-------------------------
1 | aaa | AAA
2 | bbb | BBB
这如何/为什么有效?该文档提到 from 子句中以逗号分隔的条目必须是类似表格的结构,然后将它们交叉连接在一起。这两者都不是真的。语法和语义的哪一部分允许这样做?

最佳答案

这是默认的处理方式:

select *
from the_table
CROSS JOIN LATERAL upper(description) AS upper;
原因:
  • 有几个FROM列表条目相当于交叉连接,参见 the documentation :

    If more than one table reference is listed in the FROM clause, the tables are cross-joined (that is, the Cartesian product of their rows is formed).


  • FROM 中的函数调用列表被视为存在 LATERAL ,正如文档所说:

    Table functions appearing in FROM can also be preceded by the key word LATERAL, but for functions the key word is optional



  • 这里缺少的拼图是 upper是没有表函数。确实如此,但是 PostgreSQL 对此有点模糊:任何函数都可以用作表函数(因此您可以运行 SELECT * FROM sin(pi() / 2); ),并且在许多情况下您可以使用 FROM 之外的表函数。条款(如 SELECT generate_series(1, 10); )。
    前者没有记录, but the latter is ,虽然不容易找到。

    关于sql - postgresql:来自列表中的非表表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64888958/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com