1

我正在尝试这段代码。但是我收到语法错误。正确的方法是什么?

UPDATE Classificacao AS C
SET C.ClassificacaoCPV_id = (
    SELECT CONCAT(
      SELECT ClassificacaoCPV FROM Classificacao, 
      SELECT substring_index(`ClassificacaoCPV_id`,'|',-1) FROM Classificacao)
 )

错误:SQL 错误 (1064):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以
在第 4 行的 'SELECT C.ClassificacaoCPV FROM Classificacao, SELECT substring_index(`Class'附近使用正确的语法

4

2 回答 2

1

我可以从中得出的是,您要创建一个 ClassificatiocaoCPV_id,它是 ClassificatiocaoCPV 和现有 ClassificatiocaoCPV_id 的一部分的串联。

UPDATE Classificacao
   SET ClassificacaoCPV_id = 
          CONCAT(ClassificacaoCPV, substring_index(ClassificacaoCPV_id,'|',-1))

在飞行中执行此操作有点危险。您的假设只会起作用一次,然后您可能ClassificacaoCPV_id再次拉动柱子时运气不佳。给您的一些建议: 1) 运行以下查询并确保结果是您所期望的,然后再更新您也从中提取数据的列。2) 添加一个额外的列,例如ClassificacaoCPV_id_new新的 ID 列,而不是更新您从中提取部分数据的列。

select CONCAT(C.ClassificacaoCPV, substring_index(ClassificacaoCPV_id, '|',-1) from ClassificacaoCPV

记得测量两次,因为你只能切割一次。

于 2013-04-02T16:26:58.823 回答
0

子查询需要额外的括号:

UPDATE Classificacao AS C
SET C.ClassificacaoCPV_id = (
    SELECT CONCAT(
      (SELECT ClassificacaoCPV FROM Classificaca o), 
      (SELECT substring_index(`ClassificacaoCPV_id`,'|',-1) )
    FROM Classificacao)
 )

这假设每个子查询返回一个值。您可能需要group_concat()用于此查询。

于 2013-04-02T16:10:02.093 回答