SQL语法异常

时间:2014-06-19 20:38:00

标签: mysql sql

我是MYSQL的初学者,想知道为什么我得到以下查询的sql语法异常:

select a.file_id 
   from FILE_XFER_TRACKING_DETAIL a,  FILE_XFER_TRACKING_HEADER b 
where  b.transaction_id = a.transaction_id 
and  b.interface_id =? 
and  a.file_name =? 
and  a.status = 'InProcess' 
and   a.update_time > sysdate- 0.003472222222222222 
and a.file_id <> ?
and b.direction = ?

在mysql工作台中,在编辑器中我看到and b.interface_id=?处的语法错误。我是初学者,不知道如何解决它,

3 个答案:

答案 0 :(得分:3)

您必须将实际值放在?所在的位置。例如and b.interface_id = 100

等等其他人。

答案 1 :(得分:2)

此外,对 sysdate 的替代词的引用是 Oracle 的有效语法,但对 MySQL 无效。

在MySQL中,要返回当前日期时间,您需要引用函数SYSDATE()或函数NOW()

DATE表达式中减去数值在Oracle中有效;但它在MySQL中无效。

查询中指定的特定数值(0.003472222222222222)将被Oracle解释为一天的小数部分,基本上相当于5分钟。 (= 1/24/60 * 5)

在MySQL中,为了做同等的事情,你需要这样的东西:

NOW() + INTERVAL -5 MINUTE

此外,抛弃连接操作的旧式逗号语法,改为使用JOIN关键字,并将连接谓词从WHERE子句重定位到ON子句。 (逗号连接运算符仍然是有效的语法,它只是非常过时,并且改进的语法已经存在了很长时间。)

  FROM FILE_XFER_TRACKING_DETAIL a
  JOIN FILE_XFER_TRACKING_HEADER b
    ON b.transaction_id = a.transaction_id 
 WHERE ...

答案 2 :(得分:1)

您已从某些代码中复制了此内容,其中SQL本应是一个准备好的语句。

问题标记?需要替换为where where子句中的比较值。

 where  b.transaction_id = a.transaction_id 
    and  b.interface_id = '<your value here>'
    and  a.file_name = '<your value here>' 
    and  a.status = '<your value here>' 
    and   a.update_time > sysdate- 0.003472222222222222 
    and a.file_id <> '<your value here>'
    and b.direction = ''<your value here>'