在Firebird中未知的令牌

kvk*_*k30 1 mysql sql firebird firebird-3.0

此查询在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;
Run Code Online (Sandbox Code Playgroud)

这是错误.

以下错误信息描述了失败

ODBC调用= SQLPrepareW()

SQL状态= HY000

原始错误= -104(FFFFFF98)

错误消息= [ODBC Firebird驱动程序] [Firebird]动态SQL错误

SQL错误代码= -104

令牌未知 - 第1行,第111列

Val*_*nov 5

(编辑以包含评论中的替代,更现代的语法)

而不是SELECT TOP 1 ENAME,使用以下任何一项:

另外,使用

substring('NAME111' from 1 for 5)
Run Code Online (Sandbox Code Playgroud)

代替

substring('NAME111',1,5)
Run Code Online (Sandbox Code Playgroud)

例如,使用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;
Run Code Online (Sandbox Code Playgroud)

  • @kvk30:"但是对于SQL是非空的"没有任何意义.Firebird使用SQL作为其查询语言.所以你在Firebird**中写的任何东西都是**"SQL" (2认同)