concat中有两个子查询的SQL错误

时间:2013-04-02 16:00:51

标签: mysql sql concat

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

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服务器版本对应的手册   在'SELECT C.ClassificacaoCPV FROM Classificacao附近使用的语法,
  SELECT substring_index(第4行的'Class'

2 个答案:

答案 0 :(得分:1)

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

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

这在飞行中有点危险。您的假设只能运行一次,然后再次拉出ClassificacaoCPV_id列可能会运气不佳。为您提供的一些建议:1)运行以下查询并确保在更新您也从中提取数据的列之前,结果符合您的预期。 2)为新ID列添加ClassificacaoCPV_id_new之类的其他列,而不是更新要从中提取部分数据的列。

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

记得要测量两次,因为你只能剪一次。

答案 1 :(得分: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()进行此查询。