FROM 子句中的 PostgreSQL json_array_elements - 为什么这不是笛卡尔连接?

2024-04-16

如果我有这样的表达

SELECT t.json_column->>'x',
   nested->>'y'
FROM my_table t,
   json_array_elements(t->'nested') nested

为什么我不需要加入?更准确地说,为什么这不像笛卡尔CROSS JOIN?

看起来连接是通过引用表别名隐式发生的t in the json_array_elements称呼。但表函数的隐式连接语法对我来说并不熟悉。

PostgreSQL 或其他数据库中是否有类似 SQL 语法的其他示例?


事实上这是老式的CROSS JOIN 的语法。正式等效:

SELECT
    t.json_column->>'x',
    nested->>'y'
FROM 
    my_table t
CROSS JOIN
    json_array_elements(t.json_column->'nested') nested;

该查询不会产生笛卡尔积,但其作用类似于内部联接。这是因为它有一个hidden连接的两个部分之间的引用,在本例中为别名t。这种连接称为LATERAL JOIN. For 文档 http://www.postgresql.org/docs/9.3/static/sql-select.html#SQL-FROM:

当 FROM 项包含 LATERAL 交叉引用时,计算将按如下方式进行:对于提供交叉引用列的 FROM 项的每一行,或提供列的多个 FROM 项的行集,使用以下方法计算 LATERAL 项该行或行集的列值。结果行照常与计算它们的行连接。对列源表中的每一行或一组行重复此操作。

如果连接的一部分是函数,则默认情况下将其视为横向函数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FROM 子句中的 PostgreSQL json_array_elements - 为什么这不是笛卡尔连接? 的相关文章

随机推荐

  • xdebug.so:未定义的符号:zend_ce_error

    我需要调试旧的 php 版本 PHP 5 6 22 cli built Jun 29 2016 14 26 09 Copyright c 1997 2016 The PHP Group Zend Engine v2 6 0 Copyrigh
  • 如何加载之前存储的svm分类器?

    我正在 Visual Studio 中使用 openCV SVM OpenCV 2 4 4 0 我训练它 mySVM train trainingDataMat labelsMat Mat Mat params 已保存 mySVM save
  • 用通用函数替换普通函数

    我想将 elt nth 和 mapcar 等名称与我正在原型设计的新数据结构一起使用 但这些名称指定普通函数 因此我认为需要将其重新定义为通用函数 重新定义这些名称可能是一种不好的形式 有没有办法告诉 defgeneric 不要生成程序错误
  • 如何在范围末尾自动调用 Pop-Location

    假设我有一个简单的范围 以 Push Location 和 Pop Location 结尾 Function MyFunction Location Push Location Location do other stuff here Po
  • 如何从JTable中获取图标

    我已经更改了单元格渲染JTable使用以下代码显示图像而不是文本 base table getColumnModel getColumn 3 setCellRenderer new TableCellRenderer Override pu
  • 正则表达式从文本文件中提取文本块?

    我需要使用正则表达式从 Python 文本文件中提取标题及其下方的文本块 但我发现这很困难 我转换了这个PDF https www docdroid net rduS8oC pdfsam doc pdf文本 现在看起来像这样 到目前为止 我
  • 递归地更改绘图类型(带线、带点)

    我正在尝试为基于 Julia 的 gnuplot 创建一个包装器来自动化我的绘图 我的目标是为 Julia 提供要绘制的文件名 要使用的线条样式类型以及要绘制的列 例如 如果我有文件test1 and test2 都有 3 列和标题 tim
  • 计算程序启动的次数

    如何在不保留文件和统计的情况下获取程序先前在 C 中运行的次数 c 中是否有应用程序类或其他内容来检查计数 请给出详细的解释 因为我对此一无所知 这是一个 Windows 控制台应用程序 而不是 Windows 窗体 您可以在以下位置创建一
  • 当 ObservableCollection 中的项目更新时更新 ItemsControl

    问题 你声明一个ItemsControl 或派生自的控件ItemsControl 在里面 看法 您绑定ItemsControl ItemsSource财产给ObservableCollection在你的视图模型中 当项目添加到 删除时 您的
  • 播放框架根据环境覆盖“application.conf”值

    玩 2 6 x Scala 我有一个默认的application conf文件夹内 project conf 但我想根据环境通过传递相应的文件作为命令行参数来覆盖一些值 如文档中详述 https www playframework com
  • 窗口调整大小处理事件

    我的应用程序的某些元素具有自定义调整大小事件 这些事件都有效 然而 他们却被一件事搞砸了 当将鼠标悬停在窗口边框上时 光标将成为调整大小手柄 然后单击 但不要拖动 元素的大小调整不正确 并且我的处理程序不会被触发 我已经寻找过这样的事件 但
  • 如何在下面给出的数字数组中找到锯齿状数组中的最大数字?

    如何在下面给出的数字数组中找到锯齿状数组中的最大数字 const array 2 4 10 12 4 100 99 4 3 2 99 0 如果您知道嵌套的最大深度 那么您可以flat数组并找到最大值 Math max array flat
  • JQ:如何将被识别为字符串的值相乘?

    我正在尝试从交换网络套接字获取一些贸易信息 在我从套接字获取的 JSON 中 值 p 和 q 都用双引号括起来 当我尝试将两个值相乘时 它表示我正在尝试将两个字符串相乘 因此 我通过 tonumber 过滤器传递这些字符串 并且错误消息发生
  • C# 中的内部设置属性是什么?

    我刚刚遇到了一个未知的 C 概念 谁能告诉我内部设置属性的目的是什么 它有什么用 我知道内部关键字用于在程序集中工作 如果您有一个带有内部 set 访问器 和公共 get 访问器 的属性 则意味着程序集中的代码可以读取 获取 和写入 设置
  • VS Code 突出显示了我所有的 WordPress 函数名称

    我正在使用 PHP Intelephense 版本 1 3 7 这是最新版本 我的 VS Code 是最新的 之前没有问题 但是几天前 它一直高亮我所有的wordpress函数名称 我尝试降级我的 PHP Intelephense 但情况仍
  • 对 div 进行动画处理并从中心展开

    我有一个简单的代码 可以从中心水平和垂直扩展 div 但它只扩展到左侧或底部 我希望它从中心扩展到两侧 左 50px 右 50px 或 顶部 50px 底部 50px 总计等于100px 这里是代码
  • 如何以 UTF-8 打开文件并以 UTF-16 写入另一个文件

    如何打开 UTF 8 格式的文件并写入 UTF 16 格式的另一个文件 我需要一个例子 因为我对 和 a 等某些字符有疑问 当写 m dic 时 我发现文件中写着 m dic 您可以按如下方式创建阅读器 InputStream is new
  • Android - ViewRootImpl$CalledFromWrongThreadException

    我正在使用this http savagelook com blog android display images from the internet in android 显示来自互联网的图像 但它会抛出如下错误 04 12 13 45
  • Kafka Streams 在 HDFS 上查找数据

    我正在使用 Kafka Streams v0 10 0 1 编写一个应用程序 并希望通过查找数据来丰富我正在处理的记录 该数据 带时间戳的文件 每天 或每天 2 3 次 写入 HDFS 目录 我怎样才能将其加载到Kafka Streams应
  • FROM 子句中的 PostgreSQL json_array_elements - 为什么这不是笛卡尔连接?

    如果我有这样的表达 SELECT t json column gt gt x nested gt gt y FROM my table t json array elements t gt nested nested 为什么我不需要加入 更