2016-07-25 110 views
1

此查詢在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

回答

5

(編輯以包括替代方案中,更現代的語法從評論)

代替SELECT TOP 1 ENAME,使用下列的:

  • SELECT ENAME ...FETCH FIRST ROW ONLY(SQL:2008年,火鳥3+)
  • SELECT ENAME ...ROWS 1(非標準,火鳥2+)
  • SELECTFIRST 1ENAME ...(非標,有效火鳥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; 
+0

沒有變化的錯誤 – kvk30

+0

同列?請參閱編輯 –

+2

@ kvk30:「但對於SQL非空」是沒有意義的。 Firebird使用SQL作爲其查詢語言。所以你在Firebird **寫的任何內容都是**「SQL」 –