【问题标题】:SQL error in concat with two subqueries带有两个子查询的 concat 中的 SQL 错误
【发布时间】:2013-04-02 16:00:50
【问题描述】:

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

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(`Class' at line 4

【问题讨论】:

  • 你能发布确切的错误吗?
  • @BryceAtNetwork23,问题已更新。
  • 子查询没有过滤器。这是故意的吗?当 MySQL 只想要一个结果时,您可能会得到不止一个结果。
  • 大括号不匹配!
  • @KugathasanAbimaran,你是对的,但问题仍然存在。

标签: mysql sql concat


【解决方案1】:

我可以从中得出的是,您想要创建一个 ClassificatiocaoCPV_id,它是 ClassificatiocaoCPV 和现有 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

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

【讨论】:

    【解决方案2】:

    子查询需要额外的括号:

    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()

    【讨论】:

    • 同样的错误。我也尝试了子查询,它们分别工作得很好。
    猜你喜欢
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    相关资源
    最近更新 更多