我在 tabC 中有一个选择。我已将该选择应用于 tabB。现在我必须用这两个选择中的值更新 tabA。

在 tabC 和 tabB 上选择:

SELECT * FROM tabC
WHERE id_field IN
  (SELECT id_field FROM tabB WHERE date_IN = '2011-02-22')
ORDER BY id_field

更新选项卡A:
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 个字段的所有行都具有相同的值。怎么了?

最佳答案

改用内连接

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;

关于PostgreSQL:使用 tabB 和 tabC 中的选择更新 tabA,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5090868/

10-10 05:01