Mysql 如果列值中有空格,则过程将给出错误
我有以下数据库表: 表名称-dim_模块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
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这也是理想的答案,但兄弟我只能将其标记为答案,一吨泰铢