我正在尝试使用新表中的新数据转换一些旧数据。
我创建了一个sql脚本,它返回case语句的构建。 这是我从select语句得到的一个例子:'WHEN a = 2 THEN 350'。
UPDATE A
SET A.a = CASE
(SELECT CONCAT('WHEN a= ', PP.Id, ' THEN ', LI.Id)
FROM A PP
JOIN B LI ON LI.Description = PP.Name
JOIN C L ON LI.List_Id = L.Id
WHERE L.Code = 'Code')
END
通常它应该为每行代码生成这一行:
a = 1 THEN 2
时的情况a = 2那么3
的情况a = 3 THEN 4
时的情况...
但是当我想执行代码时,它会在END语句中出错。这可能是因为它期望它像CASE WHEN a = 1 THEN 0 END而不是select语句。
有解决方法还是我做错了?
由于
答案 0 :(得分:2)
您可以使用子查询来选择case
的值li.id
,而不是尝试构建A.a = pp.id
表达式(不会像您尝试的那样工作) :
UPDATE A
set A.a = (
select li.id
from A PP
JOIN B LI ON LI.Description = PP.Name
JOIN C L ON LI.List_Id = L.Id
where pp.id = A.a
and l.code = 'Code'
)
答案 1 :(得分:0)
如果您希望表格中的每一行都有case
语句,那么您可以执行以下操作:
UPDATE A JOIN
LI
ON LI.Description = PP.Name
SET A.a = REPACE(REPLCE('CONCAT 'CASE WHEN a = [a] THEN [b] END',
'[a]', a.id), [b], li.list_id);
但是,我不知道这实际上是如何有用的。
如果您只想要新值,那么:
UPDATE A JOIN
LI
ON LI.Description = PP.Name
SET A.a = li.list_id;