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

Когда я обновляю две таблицы с помощью этого запроса:

UPDATE
    `gmw-db-051514`.`gmw_provider`,     /* Update this table... */
    `gmw-db-051514`.`tbl_conversations` /* ...even this one is empty */
SET
    `gmw_provider`.`is_partner` = true,
    `gmw_provider`.`partner_url` = 'some_url_here',
    `gmw_provider`.`partner_remove_token` = 'ABC123',
    `tbl_conversations`.`partner_initial_id` =(
CASE WHEN
    `tbl_conversations`.`user_initial_id` = '30'
THEN
    '30' ELSE `tbl_conversations`.`partner_initial_id` END),
    `tbl_conversations`.`partner_target_id` =(
CASE WHEN
    `tbl_conversations`.`user_following_id` = '30'
THEN
     '30' ELSE `tbl_conversations`.`partner_target_id` END)
WHERE`
     gmw_provider`.`provider_id` = '127'

Это работает, только если во второй таблице есть что-то (tbl_conversations).

Например, таблица (tbl_conversations)может выглядеть так, когда он заполнен:

 |user_initial_id|user_following_id|partner_initial_id|partner_target_id|etc..|
 |     30        |        41       |       30         |        41       |etc..|
 |     51        |        41       |       NULL       |        41       |etc..|
 |     37        |        30       |       NULL       |        30       |etc..|

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

Как я могу игнорировать это и сказать:база данных: это нормально, когда мы не обновляем вторую таблицу, когда она пуста, но, пожалуйста, ВСЕГДА обновляйте первую (gmw_provider).

1 Ответ

0 голосов
/ 22 сентября 2018

Это сложно.Вам нужно внешнее соединение.Обычно, было бы условие join, но я не вижу ни одного.

Я думаю, что это будет работать:

UPDATE `gmw-db-051514`.`gmw_provider` gp LEFT JOIN     /* Update this table... */
       `gmw-db-051514`.`tbl_conversations` c
       ON 1 = 1
    SET gp.`is_partner` = true,
        gp.`partner_url` = 'some_url_here',
        gp.`partner_remove_token` = 'ABC123',
        c.`partner_initial_id` = (CASE WHEN c.`user_initial_id` = 30
    T                                  THEN 30  -- assuming `id` is a number
                                       ELSE c.`partner_initial_id` 
                                 END),
        c.`partner_target_id` = (CASE WHEN c.`user_following_id` = 30
                                      THEN 30
                                      ELSE c.`partner_target_id`
                                 END)

WHERE gp.`provider_id` = 127  -- assume it is a number

Исходя из логики, я думаю, что у вас естьJOIN условие:

UPDATE `gmw-db-051514`.`gmw_provider` gp LEFT JOIN     /* Update this table... */
       `gmw-db-051514`.`tbl_conversations` c
       ON 30 IN (c.user_initial_id, c.user_following_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...