SQL修剪语法错误

时间:2015-03-13 02:27:01

标签: mysql sql syntax-error trim

我刚刚完成了“SAM在24小时内自学SQL”一书,我的任务是列出我们的活动网站的“site_code”与其各自的“site_path”匹配,前缀为“/ var” / www / html'已删除。我在过去一小时左右的时间里一直困扰着试图弄清楚我做错了什么,不知道还有什么可以尝试。

这是我到目前为止所得到的:

SELECT site_name FROM example_tbl
WHERE active = 1
AND site_code IN
(SELECT TRIM(LEADING '/var/www/html/' FROM site_path) FROM example_tbl;);

尝试运行它给我这个:

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 '' at line 4
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 ')' at line 1

我在Ubuntu ver 14.10上使用Mysql ver 14.14 Dustrib 5.5.38

嵌套查询本身工作正常,如果我从'AND'中删除所有内容,第一部分也可以正常工作,所以我不确定它们为什么不能一起工作:\

非常感谢任何帮助!

编辑: 对不起,我应该更具体一点! 'site_code','site_path'和'site_name'都是表'example_tbl'中的所有列,我正在尝试获取列表网站名称以便像这样打印

输入:/var/www/html/example.company.com 输出:example.example.com

EDIT2: 哦,对于上面的例子: 'site_name'将是:example.company.com 'site_code'将是:示例 'site_path'将是:/var/www/html/example.company.com

2 个答案:

答案 0 :(得分:0)

删除额外的分号。

SELECT site_name FROM example_tbl
WHERE active = 1
AND site_code IN
(SELECT TRIM(LEADING '/var/www/html/' FROM site_path) FROM example_tbl);

答案 1 :(得分:0)

以下查询使用MySQL SUBSTRING函数而不是TRIM

SELECT site_name
FROM example_tbl
WHERE active = 1 AND
SUBSTRING(site_path, 1, 13) = '/var/www/html' AND
SUBSTRING(site_path, 14) = site_code

我认为您不需要子查询来解决您的问题。另外,我在WHERE子句中添加了一个条件,以检查site_path是否以' var / www / html'开头。如果您希望所有网站都以此开头,请随时删除此条件。