在PostgreSQL中使用子查询

时间:2014-08-01 20:42:38

标签: 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

这适用于加入。但是,我无法弄清楚如何使用子查询只返回TableB.field1 is null的行。

2 个答案:

答案 0 :(得分: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

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

答案 1 :(得分:0)

您不需要子查询:

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

不确定您对“的意思,然后根据此选择更新”