Чтобы предотвратить отправку нескольких операторов SQL в базу данных следующим образом:
UPDATE `gmw-db-051514`.`gmw_provider`
SET `gmw_provider`.`is_partner` = TRUE,
`partner_url` = 'some-url',
`partner_remove_token` = 'ABC123'
WHERE `gmw_provider`.`provider_id` = '11';
UPDATE `gmw-db-051514`.`tbl_conversations`
SET `tbl_conversations`.`partner_initial_id` = 30
WHERE `tbl_conversations`.`user_initial_id` = 30;
UPDATE `gmw-db-051514`.`tbl_conversations`
SET `tbl_conversations`.`partner_target_id` = 30
WHERE `tbl_conversations`.`user_following_id` = 30;
... Я хотел бы объединить эти операторы SQL в один.Я знаю, что могу использовать IF и CASE в операторах MYSQL, но думаю, что я использую их неправильно.
Это моя попытка использовать оператор CASE
UPDATE
`gmw-db-051514`.`gmw_provider`,
`gmw-db-051514`.`tbl_conversations`
SET
`gmw_provider`.`is_partner` = true,
`partner_url` = 'some-url',
`partner_remove_token` = 'ABC123',
`tbl_conversations`.`partner_initial_id` =
CASE WHEN
`tbl_conversations`.`user_initial_id` = '30' THEN '30' END,
`tbl_conversations`.`partner_target_id` =
CASE WHEN
`tbl_conversations`.`user_following_id` = '30' THEN '30' END
WHERE
`gmw_provider`.`provider_id` = '11'
Условие работает,но если в строке уже есть значение, оно переписывается в ноль.
Посмотрите на эту таблицу:
|user_initial_id|user_following_id|partner_initial_id|partner_target_id|
| 30 | 41 | NULL | 41 |
| 51 | 41 | NULL | 41 |
| 37 | 30 | NULL | NULL |
После выполнения оператора UPDATE это выглядит следующим образом (41ушел)
|user_initial_id|user_following_id|partner_initial_id|partner_target_id|
| 30 | 41 | 30 | NULL |
| 51 | 41 | NULL | NULL |
| 37 | 30 | NULL | 30 |
Но это должно выглядеть так (41 еще там и 30 добавлено):
|user_initial_id|user_following_id|partner_initial_id|partner_target_id|
| 30 | 41 | 30 | 41 |
| 51 | 41 | NULL | 41 |
| 37 | 30 | NULL | 30 |
Строка user_initial_id соответствует partner_initial_id .
Строка user_following_id соответствует partner_target_id .
Как это:
A B A B
|user_initial_id|user_following_id|partner_initial_id|partner_target_id|
Можете ли выпомочь мне с этой или другой попыткой?Оператор «IF» приводит к тому же результату.
Конечно, я использовал google и нашел похожие вопросы здесь по stackoverflow, но примеры были более простыми и не в сочетании с другой таблицей.Я боялся, что это может повлиять на точное решение для этих условий.
Если вы не можете мне помочь, я использую версию с несколькими запросами, но мне это кажется очень уродливым.
Спасибо!
РЕДАКТИРОВАТЬ: Моя проблема была решена, и я узнал что-то новое!Если кто-то ищет подобное решение, подумайте: 1.) Использование объединений 2.) Не бойтесь «отправки нескольких запросов через одно и то же соединение»: -)
Благодаря @dognose и @gordon Linoff!