PostgreSQL: обновите tabA с помощью выбора из tabB и tabC - PullRequest
3 голосов
/ 23 февраля 2011

У меня есть выбор в tabC.Я применил этот выбор к tabB.Теперь я должен обновить tabA значениями из этих двух вариантов выбора.

SELECT на tabC и tabB:

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

UPDATE 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 голосов
/ 23 февраля 2011

Вместо этого используйте внутреннее соединение

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...