【问题标题】:postgres select query in clausepostgres 在子句中选择查询
【发布时间】:2021-06-25 20:26:52
【问题描述】:

Postgres 无法在 in 子句中编译查询(无法识别子查询中的表上是否存在列),我引用了一个示例查询

select * from table_a where (id is null or id not in (select distinct id from table_b)) 

此查询在生产中运行良好,但发现数据缺陷并意识到 table_b 中根本没有列 id,即使该查询在运行时没有任何编译问题

这是一个已知的缺陷还是有人遇到过这个问题?

【问题讨论】:

    标签: sql postgresql subquery


    【解决方案1】:

    来自postgresql documentation:EXISTS(子查询)-> 子查询可以引用来自周围查询的变量,这些变量将在子查询的任何一次评估期间充当常量。

    子查询中的列id指的是table_a,而不是table_b(table_b没有名为id的列)。

    所有这些查询都是等价的:

    SELECT * 
    FROM table_a
    WHERE table_a.id IN (SELECT table_a.id)
    
    SELECT * 
    FROM table_a
    WHERE table_a.id IN (SELECT id)
    
    SELECT * 
    FROM table_a
    WHERE table_a.id IN (SELECT id FROM table_b)
    
    SELECT * 
    FROM table_a
    WHERE table_a.id IN (SELECT table_a.id FROM table_b)
    

    此查询失败(table_b.id 列不存在):

    SELECT * 
    FROM table_a
    WHERE table_a.id NOT IN (SELECT table_b.id FROM table_b)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多