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关键字未指定
有什么建议吗?提前谢谢。
发布于 2019-09-09 13:15:55
在Oracle中,您需要从DUAL中指定。双表有一个虚拟记录,允许在没有表可供选择的情况下进行选择。
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;发布于 2019-09-09 13:21:49
您的代码有几个问题:
SELECT查询需要一个FROM子句;如果没有实际的表可供选择(这将导致当前所看到的错误),这可能是FROM DUAL。TRUE和FALSE是不可识别的表达式(您将得到错误"TRUE": invalid identifier)我认为您的查询可以简化如下:
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的记录。
发布于 2019-09-09 13:28:25
您的sql语句在oracle语法和语义方面是不完整的,在case语句之后添加表名。
每个数据库在构建方式上都有一定的语法和语义,所以您不能仅仅进行比较。大多数标准是select和from子句。
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;https://stackoverflow.com/questions/57854802
复制相似问题