Sql 在ORACLE:ORA-00923中:未指定FROM关键字 选择 案例 什么时候 从MID_卡选择计数* 选择计数 * 从…起 中印卡 哪里 SYNCFLAG=1 然后 对还是错 一视同仁;
它适用于postgresql,但不适用于Oracle。在Oracle中,我得到的错误为: ORA-00923:未指定From关键字Sql 在ORACLE:ORA-00923中:未指定FROM关键字 选择 案例 什么时候 从MID_卡选择计数* 选择计数 * 从…起 中印卡 哪里 SYNCFLAG=1 然后 对还是错 一视同仁;,sql,oracle,Sql,Oracle,它适用于postgresql,但不适用于Oracle。在Oracle中,我得到的错误为: ORA-00923:未指定From关键字 有什么建议吗。提前感谢。在Oracle中,您需要从双精度中指定。表DUAL有一个虚拟记录,当没有可供选择的表时,该记录允许选择 SELECT CASE WHEN ( SELECT COUNT ( * ) FROM MID_CARD ) = ( SELECT COUNT ( * ) FROM MID_CARD
有什么建议吗。提前感谢。在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;
您的代码有几个问题: 在Oracle中,SELECT查询需要FROM子句;如果没有实际的表可供选择,则这可能来自DUAL。这会导致您当前看到的错误 TRUE和FALSE是不可识别的表达式。您将得到错误TRUE:无效标识符 我认为你的问题可以简化如下:
SELECT CASE WHEN cnt = 0 THEN 'TRUE' ELSE 'FALSE'
FROM (SELECT COUNT(*) cnt FROM mid_card WHERE syncflag <> 1) x
基本上,这将返回字符串'TRUE'或'FALSE',这取决于mid_卡中是否至少有一个值具有syncflag不等于1的记录。您的sql语句在oracle语法和语义方面不完整,请在case语句之后从tablename添加 每个数据库在其构建方式上都有特定的语法和语义,因此您不能只进行比较。大多数标准使用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;
你从双重身份中失踪了。但您可以简化任一数据库中的查询:
select (case when count(*) = sum(case when syncflag = 1 then 1 else 0 end)
then 'true' else 'false'
end)
from mid_card;
如果确实需要子查询,则使用exists在两个数据库中都更有效:
注:我不认为甲骨文能辨别真假。我把它们放在单引号中,所以它们是字符串。更典型的是,我会用1表示真,用0表示假。谢谢你的指导,我确实遇到了第二种情况。
select (case when exists (select 1
from mid_card
where syncflag <> 1 -- or syncflag is null
)
then 'false' else 'true'
end)
from dual;