Firebird中的“令牌未知”错误
问题描述:
此查询在firebird上抛出错误,如何解决该错误?Firebird中的“令牌未知”错误
SELECT EMPNO,SAL
FROM EMP E
where EMPNO = (SELECT MAX(DEPTNO) FROM DEPT D WHERE E.ENAME NOT like (SELECT TOP 1 ENAME
FROM emp E1
WHERE E1.EMPNO=D.DEPTNO))
OR 1 = (SELECT MAX(DEPTNO)
FROM DEPT D
WHERE E.ENAME like substring('NAME111',1,5)) ORDER BY EMPNO;
这是错误。
以下错误信息描述了故障
ODBC调用= SQLPrepareW()
SQL状态= HY000
本机错误= -104(FFFFFF98)
错误信息= [ODBC Firebird驱动程序] [Firebird]动态SQL错误
SQL错误代码= -104
令牌未知 - 线1,列111
答
(编辑以包括替代方案中,更现代的语法从评论)
代替SELECT TOP 1 ENAME
,使用下列的:
-
SELECT ENAME ...
FETCH FIRST ROW ONLY
(SQL:2008年,火鸟3+) -
SELECT ENAME ...
ROWS 1
(非标准,火鸟2+) -
SELECT
FIRST 1
ENAME ...
(非标,有效火鸟1.5+)
此外,使用
substring('NAME111' from 1 for 5)
代替
substring('NAME111',1,5)
例如,使用FIRST 1
:
SELECT EMPNO,SAL
FROM EMP E
WHERE EMPNO = (SELECT MAX(DEPTNO)
FROM DEPT D
WHERE E.ENAME NOT LIKE (SELECT FIRST 1 ENAME
FROM emp E1
WHERE E1.EMPNO=D.DEPTN O))
OR 1 = (SELECT MAX(DEPTNO)
FROM DEPT D
WHERE E.ENAME LIKE substring('NAME111 ' from 1 for 5))
ORDER BY EMPNO;
没有变化的错误 – kvk30
同列?请参阅编辑 –
@ kvk30:“但对于SQL非空”是没有意义的。 Firebird使用SQL作为其查询语言。所以你在Firebird **写的任何内容都是**“SQL” –