mysql - MySQL:使用用户定义的变量更新查询
问题描述
我是 SQL 新手,无法找到不使用存储过程的直接使用用户定义变量的方法。 SUBSTRING_INDEX(REFERENCE)被多次调用,看起来效率低下。以下是我上一个问题的示例代码。
UPDATE TABLE
SET TYPE = (CASE WHEN SUBSTRING_INDEX(REFERENCE, '_', -1) = 'A'
THEN 1
WHEN SUBSTRING_INDEX(REFERENCE, '_', -1) = 'B'
THEN 2
ELSE TYPE
END),
COLOR = (CASE WHEN SUBSTRING_INDEX(REFERENCE, '_', -1) = 'A'
THEN 'BLUE'
WHEN SUBSTRING_INDEX(REFERENCE, '_', -1) = 'B'
THEN 'RED'
ELSE COLOR
...
在顶部添加SET @rule_id = SUBSTRING_INDEX(CELERITY_MATCH_REF, '_', 1) FROM ilms_tran_cashflows_match
并使用 @rule_id 会导致 HeidiSQL 出现语法错误。
什么是正确的方法或这是不可能的?
解决方案
您不能将变量设置为多行,而只能设置一个值。
您可以使用子查询连接该表,该子查询为每一行获取此值。
UPDATE TABLE as t1
JOIN (
SELECT id, SUBSTRING_INDEX(REFERENCE, '_', -1) AS suffix
FROM TABLE
) AS t2 ON t1.id = t2.id
SET TYPE = CASE suffix
WHEN 'A' THEN 1
WHEN 'B' THEN 2
END,
COLOR = CASE suffix
WHEN 'A' THEN 'BLUE'
WHEN 'B' THEN 'RED'
END
WHERE suffix IN ('A', 'B')
推荐阅读
- php - 未找到请求的 URL - Laravel 6
- java - 两个日期之间的日差
- selenium - isDisplayed 方法出现错误?
- android - 评级明星从最后开始削减
- kubernetes - Kubespray:如何为一个节点添加多个 GlusterFS 磁盘卷设备
- python - Pandas:基于现有行的新行
- php - 有没有办法在 linux 服务器托管 shell_exec 函数的 php 中获取 pc 名称(主机名)
- asp.net-core - ASP.net Core Web API Swagger UI 版本字段 - 是否可以在代码中设置此值?
- python - python中一个变量的内容何时与另一个变量的内容保持不变
- go - COM 中的 UTF-16 字符串