【问题标题】:Using subqueries in PostgreSQL在 PostgreSQL 中使用子查询
【发布时间】:2014-08-01 20:42:37
【问题描述】:

我才刚开始使用 PostgreSQL 一天,并且有一个非常简单的问题。我想创建一个左外连接来搜索不匹配的值。我想从连接中创建一个选择空值的子查询,然后基于此选择进行更新。我的左外连接看起来像这样:

SELECT TableA.field1, TableA.field2, TableB.field3
FROM 
   TableA
LEFT OUTER JOIN TableB ON TableA.field1 = TableB.field1

这适用于连接。但是,我无法弄清楚如何使用子查询仅返回 TableB.field1 is null 所在的行。

【问题讨论】:

    标签: sql postgresql sql-update subquery postgresql-9.3


    【解决方案1】:

    这就是你的方式......

    我想您想根据此选择更新行。使用FROM clause 将(派生)表加入UPDATE

    UPDATE some_table t
    SET    (field1,   field2,   field3)
       = (a.field1, a.field2, a.field3)
    FROM (
       SELECT a.a_id, a.field1, a.field2, a.field3
       FROM   tablea a
       LEFT   JOIN tableb b USING (field1)
       WHERE  b.field1 IS NULL
       ) a
    WHERE t.a_id = a.a_id;  -- join on the connecting column
    

    使用短语法变体更新多列。

    【讨论】:

      【解决方案2】:

      您不需要子查询:

      SELECT TableA.field1, TableA.field2, TableB.field1
      FROM TableA
         LEFT OUTER JOIN TableB ON TableA.field1 = TableB.field1
      where tableB.field1 IS NULL;
      

      不知道你对“然后根据这个选择更新一个”是什么意思

      【讨论】:

      • 谢谢,@a_horse_with_no_name 似乎有效。我的意思是,然后我会根据 TableB/field1 为 NULL 的选择将一个值计算到一个单独的字段中。
      猜你喜欢
      • 1970-01-01
      • 2022-01-24
      • 2018-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-09
      • 1970-01-01
      相关资源
      最近更新 更多