MySQL中SELECT 'a' 'b' 'c'为何自动拼接成'abc'?
MySQL中SELECT 'a' 'b' 'c'返回'abc'的原因解析
这是MySQL独有的字符串常量隐式拼接扩展语法,不属于标准SQL范畴。当你在SELECT子句里用空格分隔多个字符串常量时,MySQL会自动将它们拼接成一个完整字符串:
- 结果列名默认取第一个字符串
'a',因为MySQL会把第一个字符串当作拼接后结果的隐式别名; - 最终值
'abc'就是三个字符串常量被隐式拼接后的结果。
为什么中间加数字或列会报错?
- 插入数字时(比如
SELECT 'a' 1 'c' FROM dual;),MySQL会把数字1解析成前面字符串的别名,但别名的定义规则不允许这种直接跟在字符串后的写法(必须用AS关键字显式声明),因此触发语法错误; - 插入数据库列时(比如
SELECT 'a' username 'c' FROM users;),username会被当作前面字符串的别名,但它本身是列名,既不符合别名的语法规则,后续的'c'也无法被正确解析,所以同样报错。
如果想明确拼接字符串,建议使用标准SQL的CONCAT()函数,比如:
SELECT CONCAT('a', 'b', 'c') AS combined_str FROM dual;
写法更清晰,也能兼容其他数据库。
内容的提问来源于stack exchange,提问作者andy
相关产品推荐
相关产品推荐

