在PostgreSQL中使用子查询

在PostgreSQL中使用子查询,sql,postgresql,sql-update,subquery,postgresql-9.3,Sql,Postgresql,Sql Update,Subquery,Postgresql 9.3,我刚开始使用PostgreSQL一天,有一个非常简单的问题。我想创建一个左外部联接来搜索不匹配的值。我想从连接中创建一个子查询,它选择空值,然后根据此选择进行更新。左侧外部联接的结果如下所示: SELECT TableA.field1, TableA.field2, TableB.field3 FROM TableA LEFT OUTER JOIN TableB ON TableA.field1 = TableB.field1 这适用于连接。但是,我无法确定如何使用子查询仅返回Tabl

我刚开始使用PostgreSQL一天,有一个非常简单的问题。我想创建一个左外部联接来搜索不匹配的值。我想从连接中创建一个子查询,它选择空值,然后根据此选择进行更新。左侧外部联接的结果如下所示:

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

这适用于连接。但是,我无法确定如何使用子查询仅返回
TableB.field1为空的行

您不需要子查询:

SELECT TableA.field1, TableA.field2, TableB.field1
FROM TableA
   LEFT OUTER JOIN TableB ON TableA.field1 = TableB.field1
where tableB.field1 IS NULL;
不确定“然后基于此选择更新a”是什么意思,但以下是您如何

我想您希望基于此选择更新行。使用将(派生的)表加入到
更新中

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

使用简短的语法变量来更新多个列。

谢谢,@a_horse_和_no_名称似乎很有效。我的意思是,然后根据TableB/field1为空的选择,将一个值计算到一个单独的字段中。