Как обновить несколько полей в двух таблицах, используя внутреннее соединение - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть две таблицы.И мне нужно два поля для обновления.они связаны друг с другом внешним ключом.Я хотел бы обновить поля, найденные в этих двух таблицах, используя мое внутреннее объединение.

UPDATE cert
    SET cert.status = 1, doc.status = 1
    FROM certificates cert 
INNER JOIN documents doc ON doc.data_id = cert.certificate_id
    WHERE cert.status = 0 AND cert.user_id = _expert_id AND doc.data_type = 'CERTIFICATE';  

Приведенный выше код позволяет мне обновлять поле состояния только в таблице сертификатов.Кроме того, я хотел бы обновить поле в таблице документов

1 Ответ

0 голосов
/ 19 декабря 2018

Может быть, это поможет:

demo: db <> fiddle

WITH cert_update AS (
    UPDATE certificates cert
    SET status = 1
    FROM documents doc
    WHERE doc.data_id = cert.certificate_id 
        AND cert.status = 0 
        AND cert.user_id = '2' -- your "_expert_id"
        AND doc.data_type = 'CERTIFICATE'
    RETURNING certificate_id
)
UPDATE documents doc
SET status = 1
FROM cert_update cert
WHERE doc.data_id = cert.certificate_id 
    AND doc.data_type = 'CERTIFICATE'; 

Используя предложение WITH ( CTE ) выумеют делать несколько обновлений в одном запросе.Первый возвращает обновленный certificate_id, который можно использовать во втором запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...