关于mysql别名有什么特别的规则吗?

h43kikqp  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(404)

最近,我在学习mysql时遵循了这个特别的指南。https://www.mysqltutorial.org/mysql-join/
数据库和表是按照教程中的说明设置的。运行以下代码时,会导致语法错误

SELECT 
    m.member_id, 
    m.name member, 
    c.committee_id, 
    c.name committee
FROM
    members m
INNER JOIN committees c 
	ON c.name = m.name;

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 ', 
    c.committee_id, 
    c.name committee
FROM
    members m
INNER JOIN commi' at line 3

通过一些实验,可以通过将别名成员更改为其他成员或在其周围添加引号来修复此语法错误。然而,我不清楚这些解决方案是如何以及为什么起作用的。ps:我使用的mysql版本是8.0.19。

hof1towb

hof1towb1#

member 是保留字,因此必须用单引号封装mmmber

SELECT 
    m.member_id, 
    m.name 'member', 
    c.committee_id, 
    c.name committee
FROM
    members m
INNER JOIN committees c 
    ON c.name = m.name;

还要检查何时在mysql中使用单引号、双引号和反引号

2guxujil

2guxujil2#

member 在某些特定的mysql版本中是一个保留字:它在8.0.17版本中变为保留字,然后似乎mysql的设计者改变了主意,在8.0.19版本中改变了主意。
因此,您需要更改别名(我建议这样做),或者用反勾号将其括起来:这将使它变成一个带引号的标识符,它不会与保留字冲突,如文档中所述:
标识符可以加引号或不加引号。如果标识符包含特殊字符或是保留字,则每次引用时都必须引用它。
并且,进一步:
标识符引号字符是反勾号(`)

相关问题