【问题标题】:Token unknown in FirebirdFirebird中的令牌未知
【发布时间】:2016-07-25 10:18:52
【问题描述】:

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

【问题讨论】:

    标签: sql firebird firebird-3.0


    【解决方案1】:

    (编辑以包含来自 cmets 的替代、更现代的语法)

    使用以下任意一种代替SELECT TOP 1 ENAME

    • SELECT ENAME ... FETCH FIRST ROW ONLY (SQL:2008, Firebird 3+)
    • SELECT ENAME ... ROWS 1(非标准,Firebird 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;
    

    【讨论】:

    • @kvk30:“但对于 SQL 来说,它是非空的”没有意义。 Firebird 使用 SQL 作为其查询语言。因此,您在 Firebird 中编写的任何内容都是“SQL”
    • @kvk30 "我在 SQL 中使用过" 没有意义。你还会在 Firebird 中使用什么?
    • 对于 Firebird 2.0 及更高版本(OP 在 FB3 上),可能应该使用 ROWS m [TO n] 而不是 FIRST n
    • @pilcrow 对于 Firebird 3,使用 SQL 标准 FETCH FIRST ROW ONLY 会更有意义
    猜你喜欢
    • 2018-03-20
    • 1970-01-01
    • 2022-10-16
    • 2020-04-15
    • 1970-01-01
    • 2023-03-11
    • 2016-04-22
    • 1970-01-01
    • 2017-11-26
    相关资源
    最近更新 更多