[英]MYSQL UPDATE Query using expression
我有一个表说table1与列id(INT), tag(VARCHAR),tag2(VARCHAR),var1(VARCHAR),var2(VARCHAR) 和 external_tags(TINY INT) 。 只有 id、tag 和 external_tags 字段中有数据。 我必须更新此表中的每一行,以便标记字段中的值应拆分为 tag2 和 var1 字段。 例如,有很多行,如
| 身份证 | 标签 | 标签2 | 变量 1 | external_tags |var2
| 1 | school_signup_xxx | 空 | 空 | 0 |空
| 2 | course_enroll_213 | 空 | 空 | 0 |空
| 3 | course_enroll_556 | 空 | 空 | 0 |空
| 4 | Automation_notify_bounced_111_222 | 空 | 空 | 0 |空
| 5 | Automation_notify_bounced_666_223 | 空 | 空 | 0 |空
| 6 | Automation_notify_bounced_426_253 | 空 | 空 | 0 |空
| 7 | registered_livestream_co_host_111_schedule_444 | 空 | 空 | 0 |空
| 8 | registered_livestream_co_host_632_schedule_234 | 空 | 空 | 0 |空
| 9 | 参加_recurring_live_class_868_rec_schedule_151 | 空 | 空 | 0 |空
| 10 | 参加_recurring_live_class_545_rec_schedule_747 | 空 | 空 | 0 |空
| 11 | manual_in | 空 | 空 | 1 |空
| 12 | 测试标签 | 空 | 空 | 1 |空
| 13 | 测试标签 abc | 空 | 空 | 1 |空
我想更新表 table1 中的上述行,如下所示
| 身份证 | 标签 | 标签2 | 变量 1 | external_tags |var2
| 1 | school_signup_xxx | school_signup | xxx | 0 |空
| 2 | course_enroll_213 | course_enroll | 第213话 0 |空
| 3 | course_enroll_556 | course_enroll | 第556话 0 |空
| 4 | Automation_notify_bounced_111_222| Automation_notify_bounced | 111 | 0 |222
| 5 | Automation_notify_bounced_666_223| Automation_notify_bounced | 第666话 0 |223
| 6 | Automation_notify_bounced_426_253| Automation_notify_bounced | 第426话 0 |253
| 7 | registered_livestream_co_host_111_schedule_444 | register_livestream_co_host | 111 | 0 |444
| 8 | registered_livestream_co_host_632_schedule_234 | register_livestream_co_host | 第632话 0 |234
| 9 | 参加_recurring_live_class_868_rec_schedule_151 | 参加_recurring_live_class | 第868话 0 |151
| 10 | 参加_recurring_live_class_545_rec_schedule_747 | 参加_recurring_live_class | 第545话 0 |747
| 11 | manual_in | manual_in | 空 | 1 |空
| 12 | 测试标签 | 测试标签 | 空 | 1 |NULL | 13 | 测试标签 abc | 测试标签 abc | 空 | 1 |NULL +----+-------------------+------+------+------- --------+---------------+------------------------ ---------------
有6个案例
如何使用 6 个更新查询更新上述案例?
请用MYSQL查询回复。
您可以将返回 6 行的查询加入到表中,每个不同的情况各 1 行,并使用MySql's string functions
提取列tag
的字符串片段,这将更新其他列:
UPDATE tablename t
INNER JOIN (
SELECT 0 external_tags, 'school_signup' tag UNION ALL
SELECT 0, 'course_enroll' UNION ALL
SELECT 0, 'automation_notify_bounced' UNION ALL
SELECT 0, 'registered_livestream_co_host' UNION ALL
SELECT 0, 'attended_recurring_live_class' UNION ALL
SELECT 1, NULL
) e ON t.external_tags = e.external_tags AND (e.tag IS NULL OR INSTR(t.tag, CONCAT(e.tag, '_')) = 1)
SET t.tag2 = COALESCE(e.tag, t.tag),
t.var1 = CASE
WHEN t.external_tags = 1 THEN t.var1
ELSE SUBSTRING_INDEX(SUBSTR(t.tag, CHAR_LENGTH(e.tag) + 2), '_', 1)
END,
t.var2 = CASE
WHEN t.external_tags = 1 OR INSTR(SUBSTR(t.tag, CHAR_LENGTH(e.tag) + 2), '_') = 0 THEN t.var2
ELSE SUBSTRING_INDEX(SUBSTR(t.tag, CHAR_LENGTH(e.tag) + 2), '_', -1)
END
请参阅演示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.