【问题标题】:PostgreSQL SQL Order ByPostgreSQL SQL 排序依据
【发布时间】:2018-08-28 00:27:23
【问题描述】:

此“order by”子句中的子查询是否被视为 scalar subquery 或其他内容(例如,table subquery)?

select id, field
  from table1 t1
 order by (select field
            from table1
           where table1.id = (select value1
                                from table2
                               where value1 = table1.id 
                                 and value2 = t1.id) asc

让我感到困惑的是,上面链接的 PostgreSQL 文档指出标量子查询只返回一行一列。 但是在这种用法中,子查询返回的行并不总是相同的行,而是根据外部查询返回的行而有所不同。因此,至少在 order by 子句中以这种方式使用时,更准确的描述可能是,它只返回一行和一列对于外部查询返回的每一行 em>。

跟进:在进一步阅读中,很明显这是一个标量子查询,虽然更具体地说是一个 correlated 标量子查询。 This 注释子查询可以是 correlateduncorrelated,区别在于它是否“引用并依赖于外部查询中的值”。 This 进一步阐明 correlated 标量子查询“为其相关外部表集的每一行返回单个值 ”,而 noncorrelated标量子查询“将单个值返回到其包含的查询”。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    order by 中的子查询是标量子查询。它为结果集中的每一行(最多)返回一个值。

    【讨论】:

    • 谢谢,戈登!进一步阅读,如果我理解正确(见上文),它是一个相关的标量子查询。
    • @JWoodchuck 。 . .是的,它是一个 correlated 标量子查询。但相关性并不是它在ORDER BY 中可接受的原因,而是标量性是原因。另一方面,在ORDER BY 中,非相关标量子查询(在大多数情况下)没有多大意义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-06
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    相关资源
    最近更新 更多