1

此查询在 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 列

4

1 回答 1

5

(编辑以包括来自评论的替代,更现代的语法)

代替SELECT TOP 1 ENAME,使用以下任何一种:

  • SELECT ENAME ... FETCH FIRST ROW ONLY(SQL:2008,火鸟 3+)
  • SELECT ENAME ... ROWS 1(非标准,火鸟 2+)
  • SELECT FIRST 1 ENAME ...(非标准,有效 Firebird 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;
于 2016-07-25T11:17:15.680 回答