Mysql 如果列值中有空格,则过程将给出错误

Mysql 如果列值中有空格,则过程将给出错误,mysql,Mysql,我有以下数据库表: 表名称-dim_模块 id Creation_Date Goals Alternative Value ----------------------------------------------------------- 1 2014-04-17 10:09:30 G1 A 0.86 2 2014-04-17 10:09:30 G1 B

我有以下数据库表: 表名称-dim_模块

id       Creation_Date         Goals  Alternative    Value
-----------------------------------------------------------
1   2014-04-17 10:09:30         G1         A         0.86
2   2014-04-17 10:09:30         G1         B         0.87
3   2014-04-17 10:09:30         G2         A         0.5
4   2014-04-17 10:09:30         G2         B         0
我使用以下程序来获得所需的输出

CREATE DEFINER=`root`@`localhost` PROCEDURE `stmt`()
BEGIN
SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(goals = ''',
      goals,
      ''', round(value, 2), NULL)) AS ',
      goals
    )
  ) INTO @sql
FROM sgwebdb.dim_module;
SET @sql = CONCAT('SELECT alternative, ', @sql, ' FROM sgwebdb.dim_module GROUP BY alternative');

prepare stmt from @sql;

END
我得到以下输出与上述程序

Alternative    G1       G2
-----------------------------
 A            0.86      0.50    
 B            0.87      0.00
但若Goals列的值在第一个表(dim_模块)中有空格,比如G1是G1 检查下表中的第一行目标列

id创建\u日期目标替代值 ----------------------------------------------------------- 1 2014-04-17 10:09:30 G 1 A 0.86 2 2014-04-17 10:09:30 G1 B 0.87 3 2014-04-17 10:09:30 G2 A 0.5 4 2014-04-17 10:09:30 G2 B 0

然后给出下面的错误

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '1,MAX(IF(goals = 'Goal1', round(value, 2), NULL)) AS Goal1,MAX(IF(goals = 'Goal2' at line 1

请帮助我解决此错误。

要在字段名中使用空格,需要使用反勾号来引用它们

替换

  ''', round(value, 2), NULL)) AS ',                 -- Will use field name G 1, breaks
  goals


它将引用字段名并允许使用空格。

要在字段名中使用空格,需要使用反勾号来引用它们

替换

  ''', round(value, 2), NULL)) AS ',                 -- Will use field name G 1, breaks
  goals


它将引用字段名并允许空格。

我认为
后面的字段名中的问题是作为关键字出现的。如果字段名中有空格,则应将其引用。试试这个:

CONCAT(
  'MAX(IF(goals = ''',
  goals,
  ''', round(value, 2), NULL)) AS ',
  '`', goals,'`'
)

我认为
后面的字段名中存在的问题是
关键字。如果字段名中有空格,则应将其引用。试试这个:

CONCAT(
  'MAX(IF(goals = ''',
  goals,
  ''', round(value, 2), NULL)) AS ',
  '`', goals,'`'
)

你想发生什么事?它应该忽略空格,还是将
G1
G1
完全分开,或者…?@JoachimIsaksson我只想显示第一个表中的相同名称。如果G1应该显示G1,如果它在第一个表中是G1,那么过程应该将G1作为输出。@JoachimIsaksson基本上不接受输出中的空格。我想要若列值有空格,则给出上述错误。您希望发生什么情况?它应该忽略空格,还是将
G1
G1
完全分开,或者…?@JoachimIsaksson我只想显示第一个表中的相同名称。如果G1应该显示G1,如果它在第一个表中是G1,那么过程应该将G1作为输出。@JoachimIsaksson基本上不接受输出中的空格。我想要也要给空格。如果列值有空格,则给出上述错误。@xpy问题下面的注释似乎表示op希望它们是单独的组。@JoachimIsaksson我只是在测试您的解决方案,这似乎是理想的解决方案。@xpy问题下面的评论似乎表明op希望他们成为单独的小组。@JoachimIsaksson我只是在测试你的解决方案,这似乎是理想的解决方案。这也是理想的答案,但兄弟我只能将其标记为答案,thx a Ton这也是理想的答案,但兄弟我只能将其标记为答案,一吨泰铢