【问题标题】:Oracle SQL: missing expression error on UNION clauseOracle SQL:UNION 子句上缺少表达式错误
【发布时间】:2015-04-27 03:59:51
【问题描述】:

我有以下 SQL 查询:

SELECT CASE WHEN connect_by_isleaf = 1 THEN 0
        WHEN level = 1             THEN 1
        ELSE                           -1
   END AS status, 
   level, 
   name AS title, 
   NULL AS icon, 
   child_id   AS value, 
   NULL AS tooltip, 
   NULL AS link 
FROM (
   SELECT alu.arl_user_user_id AS child_id,
          alu.arl_list_list_id AS parent_id,
          '0'                  AS type,
         emp.employee_name    AS name
    FROM arl_list_user alu
    INNER JOIN arl_user au
            ON au.user_id = alu.arl_user_user_id
    INNER JOIN arl_active_emp emp
            ON au.arl_active_employee_id = emp.employee_id
  UNION
  SELECT all.arl_list_list_id  AS child_id,
         all.arl_list_list_id1 AS parent_id,
         '1'                   AS type,
         al.name               AS name
    FROM arl_list_list all
    INNER JOIN arl_list al
            ON al.list_id = all.arl_list_list_id
) table
START WITH child_id IN (
  SELECT child_id
    FROM table
    WHERE type = '1'
)
CONNECT BY PRIOR child_id = parent_id

这会导致解析错误:

ORA-06550:第 21 行,第 1 列:ORA-00936:缺少表达式。

我做了一些谷歌搜索,看起来“缺少表达式”通常意味着查询在某处缺少 FROM 子句,或者在 UNION 的情况下,两个联合查询的列数不同.我很确定这里不是这种情况,我无法弄清楚真正的问题是什么。

【问题讨论】:

  • 您已将内部选择别名为table,这是一个保留关键字,因为您可以从表类型中进行选择(因此缺少子句)。您不使用别名,因此请将其删除。
  • connect_by_isleaf 来自哪里?
  • 我会尝试自己运行内部 (UNION) 查询,看看您是否遇到同样的错误。
  • @PhilWalton:这是一个 Oracle 内置函数:docs.oracle.com/cd/E11882_01/server.112/e41084/…
  • @a_horse_with_no_name 。 . .哎呀,我的脑海里已经在那一行放了一个as。删除了我的评论。

标签: sql oracle union


【解决方案1】:

请不要使用alltable(以及许多其他保留字)作为表、列或子查询的别名...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2011-02-28
    相关资源
    最近更新 更多