как обновить таблицу с условием соединения или левого соединения в postgresql?

#postgresql

Вопрос:

У меня есть столы

 Table A
 a_id
 b_id
 a_field_1
 a_field_2
 a_field_3

Table B
 b_id
 b_field_1
 b_field_2
 b_field_3
 

если я хочу обновить a_field_1 только в том случае, если b_field_1 у меня есть определенное условие ? как это сделать ? я пробовал это, но это не работает

 UPDATE A SET A.a_field_1 = 1 , A.a_field_2 = 2
WHERE B.b_field_1 = 1 AND A.b_id = B.b_id;
 

Комментарии:

1. Что происходит вместо этого? Что вы пытались сделать, чтобы это сработало? Возможно, это проще отладить, когда вы делитесь структурой таблицы, образцами входных данных и ожидаемым результатом

Ответ №1:

Согласно документу Postgres, вы можете использовать, как показано ниже:

 [ WITH [ RECURSIVE ] with_query [, ...] ]
UPDATE [ ONLY ] table_name [ * ] [ [ AS ] alias ]
    SET { column_name = { expression | DEFAULT } |
          ( column_name [, ...] ) = [ ROW ] ( { expression | DEFAULT } [, ...] ) |
          ( column_name [, ...] ) = ( sub-SELECT )
        } [, ...]
    [ FROM from_item [, ...] ]
    [ WHERE condition | WHERE CURRENT OF cursor_name ]
    [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
 

Пример Запроса:

 UPDATE A
SET a_field_1 = 1, a_field_2 = 2
FROM B
WHERE
  B.b_field_1 = 1 
  AND A.b_id = B.b_id;