PostgreSQL:使用来自tabB和tabC的查询结果更新tabA

3
我有一个选项在tabC中。我已经将该选项应用于tabB。现在我需要使用这两个选择的值更新tabA。
在tabC和tabB上进行SELECT:
SELECT * FROM tabC
WHERE id_field IN
  (SELECT id_field FROM tabB WHERE date_IN = '2011-02-22')
ORDER BY id_field

更新tabA:
UPDATE tabA
SET field_1 = tabC.field_1, field_2 = tabC.field_2, field_2 = tabC.field_2
FROM tabC WHERE tabA.id_field IN
  (SELECT tabC.id_field FROM tabC WHERE tabC.id_field IN
    (SELECT id_field FROM tabB WHERE date_IN = '2011-02-22'))

UPDATE语句运行时没有任何错误,但结果与我的预期不符:所有行的3个字段具有相同的值。出了什么问题?
1个回答

10

使用内连接(inner join)代替

UPDATE tabA
   SET field_1 = tabC.field_1,
       field_2 = tabC.field_2,
       field_3 = tabC.field_3 
  FROM tabC
       INNER JOIN tabB ON tabC.id_field = tabB.id_field AND tabB.date_IN = '2011-02-22'
 WHERE tabA.id_field = tabC.id_field;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接