对于项目,我从客户端检索数据库。此数据库包含具有由多个单词组成的属性的表,这些单词由一个点分隔连接。例如:
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不会失败。那么解决方案是什么?
对于信息来说,这个数据库是我不负责任的,我是从客户端获得的!
答案 0 :(得分:2)
答案 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)