生成的sql案例

时间:2017-05-02 12:20:15

标签: mysql sql case

我正在尝试使用新表中的新数据转换一些旧数据。

我创建了一个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语句。

有解决方法还是我做错了?

由于

2 个答案:

答案 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;