PostgreSQL:使用tabB和tabC中的选项更新tabA

alb*_*011 3 postgresql select

我在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
Run Code Online (Sandbox Code Playgroud)

更新标签:

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'))
Run Code Online (Sandbox Code Playgroud)

UPDATE语句运行没有任何错误,但结果不是我想要的:3个字段对所有行都有相同的值.怎么了?

Gav*_*vin 10

请改用内连接

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;
Run Code Online (Sandbox Code Playgroud)