首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ORACLE中:ORA-00923:FROM关键字未指定

在ORACLE中:ORA-00923:FROM关键字未指定
EN

Stack Overflow用户
提问于 2019-09-09 13:14:38
回答 4查看 74关注 0票数 0
代码语言:javascript
复制
SELECT 
CASE
  WHEN
    ( SELECT COUNT ( * ) FROM MID_CARD ) = (
    SELECT COUNT
      ( * ) 
    FROM
      MID_CARD 
    WHERE
      SYNCFLAG = 1 
      ) THEN
  TRUE ELSE FALSE 
  END AS is_equal;

它在postgresql中工作,但在Oracle中不起作用。在Oracle中,我得到的错误是:

ORA-00923:From关键字未指定

有什么建议吗?提前谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2019-09-09 13:15:55

在Oracle中,您需要从DUAL中指定。双表有一个虚拟记录,允许在没有表可供选择的情况下进行选择。

代码语言:javascript
复制
SELECT
CASE
  WHEN
    ( SELECT COUNT ( * ) FROM MID_CARD ) = (
    SELECT COUNT
      ( * ) 
    FROM
      MID_CARD 
    WHERE
      SYNCFLAG = 1 
      ) THEN
  TRUE ELSE FALSE 
  END AS is_equal FROM DUAL;
票数 1
EN

Stack Overflow用户

发布于 2019-09-09 13:21:49

您的代码有几个问题:

  • 在甲骨文中,SELECT查询需要一个FROM子句;如果没有实际的表可供选择(这将导致当前所看到的错误),这可能是FROM DUAL
  • TRUEFALSE是不可识别的表达式(您将得到错误"TRUE": invalid identifier)

我认为您的查询可以简化如下:

代码语言:javascript
复制
SELECT CASE WHEN cnt = 0 THEN 'TRUE' ELSE 'FALSE'
FROM (SELECT COUNT(*) cnt FROM mid_card WHERE syncflag <> 1) x

基本上,这将返回字符串'TRUE''FALSE',这取决于mid_card中的至少一个值是否有syncflag不等于1的记录。

票数 0
EN

Stack Overflow用户

发布于 2019-09-09 13:28:25

您的sql语句在oracle语法和语义方面是不完整的,在case语句之后添加表名。

每个数据库在构建方式上都有一定的语法和语义,所以您不能仅仅进行比较。大多数标准是select和from子句。

代码语言:javascript
复制
   SELECT 
  CASE
 WHEN
   ( SELECT COUNT ( * ) FROM 
    MID_CARD ) = (
  SELECT COUNT
  ( * ) 
   FROM
  MID_CARD 
   WHERE
  SYNCFLAG = 1 
  ) THEN
  'TRUE'  ELSE 'FALSE' 
    END AS is_equal from dual;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57854802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档