当表包含由点分隔的多个单词组成的属性时请求SQL。

时间:2017-03-15 09:22:11

标签: mysql

对于项目,我从客户端检索数据库。此数据库包含具有由多个单词组成的属性的表,这些单词由一个点分隔连接。例如:

table A : id, number.client , global.score
table B : id, favorite.style 

因此,当我对此表执行sql请求以根据number.client过滤以过滤结果时,我发现MySQL返回了错误。

例如,我有这个要求:

SELECT * FROM A 
INNER JOIN B 
ON (A.ref_track = B.id) 
INNER JOIN C 
ON (C.id = B.ref_plannode) 
WHERE (B.id= 1) 
AND (A.number.client > 50) 
ORDER BY A.id DESC

当我运行此请求时,我收到此错误:

MySQL replied:  
#1064 - Syntax error on A.number.client > 50

我认为当我们有一个由point分隔的servel字组成的属性(如number.client)时,MySql不会失败。那么解决方案是什么?

对于信息来说,这个数据库是我不负责任的,我是从客户端获得的!

3 个答案:

答案 0 :(得分:2)

您必须使用“`”

引用列名称
{{1}}

修改

Working example

答案 1 :(得分:1)

与白色空格相同的情况,你可以使用这个:

SELECT * FROM A 
INNER JOIN B 
ON (A.ref_track = B.id) 
INNER JOIN C 
ON (C.id = B.ref_plannode) 
WHERE (B.id= 1) 
AND (A.`number.client` > 50) 
ORDER BY A.id DESC

MySQL可以使用不同的引号或braquets,取决于配置。 MySQL服务器可以在不同的SQL模式下运行,并且可以针对不同的客户端以不同的方式应用这些模式,具体取决于sql_mode系统变量的值。 您可以使用以下命令查看配置:

SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;

您可以在此处了解有关mysql配置的更多信息https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_ansi_quotes

答案 2 :(得分:0)

尝试引用列名称,将其放在方括号之间。 所以

AND (A.[number.client] > 50)