我刚刚完成了“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
答案 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'开头。如果您希望所有网站都以此开头,请随时删除此条件。