我在MySQL查询中遇到语法错误。 MySQL和SQL服务器的工作方式不同吗?任何人都可以建议,出了什么问题,在哪里?
select b.component, d.matter, d.bug, d.timestamp, d.os
from bugs.profiles p, ops_reports.BPR_TAG_DATA d
left join (Select * from bugs where product='test') b
on d.bug=b.bug_id
where d.tagid = 6
and timestamp between "2014-04-21" and "2014-04-24"
and login_name like 'test'
and p.userid = d.user
错误消息 24/04/2014 23:14:10 0:00:00.037 MySQL数据库错误:您的SQL语法出错。查看与您的MySQL服务器版本相对应的手册,以获得正确的语法,以便使用'选择*来自bugs,其中product ='转换')为b on(d.bu 1 0
答案 0 :(得分:2)
您不应混合使用隐式和显式联接。一个简单的规则:不要在from
子句中使用逗号。
select b.component, d.matter, d.bug, d.timestamp, d.os
from ops_reports.BPR_TAG_DATA d left join
bugs b
on b.product = 'test' and d.bug = b.bug_id left join
bugs.profiles p
on p.userid = d.user
where d.tagid = 6 and
timestamp between '2014-04-21' and '2014-04-24' and
login_name like 'test';
我还删除了子查询,将条件移动到on
子句。这使查询更有效。并将日期常量的分隔符更改为单引号。对字符串使用双引号会导致混淆。
编辑:
所有这些都说,问题中的查询看起来像,就像它在语法上是正确的一样。我注意到错误消息没有引用这个确切的查询。该查询包含product='test') b
,错误消息为product='Conversions') as b
。也许还有其他差异。