我是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=?
处的语法错误。我是初学者,不知道如何解决它,
答案 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>'