Как сделать 3 таблицы JOIN в запросе UPDATE?

338

Я задал вопрос и получил этот ответ, который помог.

   UPDATE TABLE_A a JOIN TABLE_B b 
   ON a.join_col = b.join_col AND a.column_a = b.column_b 
   SET a.column_c = a.column_c + 1

Теперь я хочу сделать это, если задействованы 3 таблицы что-то вроде этого.

    UPDATE tableC c JOIN tableB b JOIN tableA a

Мой вопрос в основном... возможно ли это сделать 3 таблицы join в инструкции UPDATE? и для чего это правильный синтаксис? Спасибо. Я делаю...

 JOIN tableB, tableA
 JOIN tableB JOIN tableA
  • 2
    Конечно, это возможно. Попробуйте. Синтаксис такой же, как у вас есть - вам просто нужно добавить следующий JOIN и его условие ON , как в запросе SELECT .
  • 2
    UPDATE t1 JOIN t2 ON t1.id = t2.t1_id JOIN t3 ON t3.id = t2.t3_id SET t1.col = 'newval'
Показать ещё 1 комментарий
Теги:
join

4 ответа

615
Лучший ответ

ответ yes вы можете

попробуй так:

UPDATE TABLE_A a 
    JOIN TABLE_B b ON a.join_col = b.join_col AND a.column_a = b.column_b 
    JOIN TABLE_C c ON [condition]
SET a.column_c = a.column_c + 1

EDIT:

Для общего обновления:

   UPDATE TABLEA a 
   JOIN TABLEB b ON a.join_colA = b.join_colB  
   SET a.columnToUpdate = [something]
  • 2
    Странно, однако, что мое программное обеспечение HeidiSQL сообщает об отсутствии строк, на которые влияют, хотя данные показывают, что обновления были сделаны.
  • 1
    @Pianoman Для меня это тоже произошло, и это имело какое-то отношение к ON UPDATE CURRENT_TIMESTAMP, я просто добавил обновление вручную и исправил его, просто сказав, если это случится с кем-то еще
Показать ещё 7 комментариев
29

Альтернативный способ достичь того же результата - не использовать ключевое слово JOIN вообще.

UPDATE TABLE_A, TABLE_B
SET TABLE_A.column_c = TABLE_B.column_c + 1
WHERE TABLE_A.join_col = TABLE_B.join_col
  • 3
    Я попробовал это на 5.5.62, и MySQL не понравился синтаксис. Согласно руководству [ dev.mysql.com/doc/refman/5.6/en/update.html] , запрос должен быть следующим: UPDATE TABLE_A, TABLE_B SET TABLE_A.column_c = TABLE_A.column_c +1 WHERE TABLE_A.join_col = TABLE_B.join_col
  • 7
    Это делает неявное JOIN таким же образом, делая SELECT * FROM TABLE_A, TABLE_B ... делает
Показать ещё 4 комментария
2

Ниже представлен запрос обновления, который включает в себя JOIN и WHERE оба. Точно так же мы можем использовать несколько предложений join/where, надеюсь, это вам поможет: -

UPDATE opportunities_cstm oc JOIN opportunities o ON oc.id_c = o.id
 SET oc.forecast_stage_c = 'APX'
 WHERE o.deleted = 0
   AND o.sales_stage IN('ABC','PQR','XYZ')
  • 2
    Добро пожаловать в стек переполнения! Спасибо за этот фрагмент кода, который может оказать некоторую немедленную помощь. Правильное объяснение значительно повысило бы его образовательную ценность, поскольку показало бы, почему это хорошее решение проблемы, и сделало бы его более полезным для будущих читателей с похожими, но не идентичными вопросами. Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение и указать, какие ограничения и предположения применяются.
0

Альтернативный общий план, который я добавляю только как независимый ответ, потому что взорванный "комментарий к ответу" не будет принимать новые строки без публикации всего редактирования, даже если он еще не закончен.

UPDATE table A
JOIN table B ON {join fields}
JOIN table C ON {join fields}
JOIN {as many tables as you need}
SET A.column = {expression}

Пример:

UPDATE person P
JOIN address A ON P.home_address_id = A.id
JOIN city C ON A.city_id = C.id
SET P.home_zip = C.zipcode;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню