在PostgreSQL中使用子查询
我刚开始使用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
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为空的选择,将一个值计算到一个单独的字段中。