首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我在MySQL中的准备语句函数不能工作?

问为什么我在MySQL中的准备语句函数不能工作?
EN

Stack Overflow用户
提问于 2021-05-18 16:48:21
回答 1查看 65关注 0票数 0

我对动态SQL相当陌生。我正在做一个特定的任务,尽管我做的事情就像谷歌上的某些MySQL站点一样,但我遇到了一个语法错误。那里可能出了什么问题?提前谢谢。对应用的解决方案表示赞赏。

代码语言:javascript
复制
SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(case when field_key = ''',
      DAY(birth_date),
      ''' then field_value end) ',
      DAY(birth_date)
    )
  ) INTO @sql
FROM
  employees;
SET @sql = CONCAT('SELECT address, ', @sql, ' 
                  FROM employees
                    GROUP BY address');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

实际错误:

18:41:44从@sql错误代码: 1064准备stmt。您的SQL语法有错误;请检查与您的MySQL服务器版本对应的手册,以获得接近'1,max(当field_key = '10‘然后field_value结束时)的正确语法) 10,最大值(在第1行0.000秒

处使用field_ke时)。

EN

回答 1

Stack Overflow用户

发布于 2021-05-18 17:04:52

您似乎在使用整数作为列别名。这将导致任何SQL中的错误,而不仅仅是动态SQL:

代码语言:javascript
复制
mysql> select 'abc' 1, 'def' 2 from dual;
ERROR 1064 (42000): 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, 'def' 2 from dual' at line 1

您可以通过在别名周围使用倒计时来解决这个问题:

代码语言:javascript
复制
mysql> select 'abc' as `1`, 'def' as `2` from dual;
+-----+-----+
| 1   | 2   |
+-----+-----+
| abc | def |
+-----+-----+

或在别名前加上一个非数字字符:

代码语言:javascript
复制
mysql> select 'abc' as day1, 'def' as day2 from dual;
+------+------+
| day1 | day2 |
+------+------+
| abc  | def  |
+------+------+

mysql> select 'abc' as _1, 'def' as _2 from dual;
+-----+-----+
| _1  | _2  |
+-----+-----+
| abc | def |
+-----+-----+

关于你的评论:

以下是你如何在化名周围放回滴答声:

代码语言:javascript
复制
...
CONCAT(
  'max(case when field_key = ''',
  DAY(birth_date),
  ''' then field_value end) `',
  DAY(birth_date), '`'
)
...

或添加前缀:

代码语言:javascript
复制
...
CONCAT(
  'max(case when field_key = ''',
  DAY(birth_date),
  ''' then field_value end) as day',
  DAY(birth_date)
)
...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67590600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档