出于某种原因,我正在工作的新公司的开发人员决定将他们的列命名为“忽略”和“存在”。现在,当我在where子句中使用这些单词运行MySQL查询时,出现语法错误;但是,我似乎无法弄清楚如何引用这些列而不会遇到错误。我尝试将它们设置为字符串,但这没有任何意义。
帮助?
此外,是否存在这种不匹配的术语?
答案 0 :(得分:11)
将名字放在反引号中:
`ignore`, `exists`
如果您正在跨多个表或数据库工作,则需要分别转义数据库名称,表名和字段名(如果每个匹配关键字):
SELECT * FROM `db1`.`table1`
LEFT JOIN `db2`.`table2` on `db1`.`table1`.`field1`=`db2`.`table2`.`field2`
只有与关键字实际匹配的部分才必须进行转义,例如:
select * from `db1`.table
也可以。
答案 1 :(得分:4)
官方用语是“白痴”:-)你可以在名字上加上反引号,如
`ignore`
但如果可能,我会认真考虑更改名称。反引号不是标准的SQL,我更喜欢我的列名更具表现力。例如,ignoreThisUser
或orderExists
(我尝试遵循的一般规则是在某处有名词和动词)。
有趣的是,某些DBMS可能会发现不会将其视为基于上下文的保留字。例如,DB2 / z允许相当可怕的:
> CREATE TABLE SELECT ( SELECT VARCHAR(10) );
> INSERT INTO SELECT VALUES ('HELLO');
> SELECT SELECT FROM SELECT;
SELECT
---------+---------+---------+--------
HELLO
DSNE610I NUMBER OF ROWS DISPLAYED IS 1