我正在尝试将一些旧数据与新表中的新数据转换。
我创建了一个SQL脚本,该脚本返回案例语句的构建。这是我从Select语句中获得的一个示例:'当a = 2 tat 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然后2
的情况a = 2然后3
的情况a = 3然后4
的情况...
但是,当我想执行代码时,它在End语句上会出现错误。这可能是因为它期望它像a = 1 then 0结束而不是选择语句的情况。
有能力解决还是我做错了?
谢谢
,而不是尝试构建case
表达式(这将无法以您尝试的方式工作(,而可以使用子查询选择li.id
的值,其中A.a = pp.id
像So:
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'
)
如果您需要在表中的每一行上进行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;