尝试计算 2 个表之间的计数差异。
遵循这个答案,但得到00923. 00000 - "FROM keyword not found where expected"
SELECT ( SELECT count(*) FROM XE_ERR_OVLP WHERE FLAG = 'E')
- (SELECT count(*) FROM XE_ERR_RANG WHERE FLAG = 'H' ) as cnt;
如何实现?
那是:
SELECT ( SELECT count(*) FROM XE_ERR_OVLP WHERE FLAG = 'E')
- (SELECT count(*) FROM XE_ERR_RANG WHERE FLAG = 'H' ) as cnt
from dual;
与其他数据库不同,Oracle 需要一个from
子句。您可以使用虚拟表dual
。
你可以使用UNION ALL
and SUM
:
SELECT SUM(c) AS cnt
FROM (SELECT 1 AS c FROM XE_ERR_OVLP WHERE FLAG = 'E'
UNION ALL
SELECT -1 FROM XE_ERR_RANG WHERE FLAG = 'H') sub;
您需要添加FROM DUAL
您的查询应如下所示
SELECT ( SELECT count(*) FROM XE_ERR_OVLP WHERE FLAG = 'E')
- (SELECT count(*) FROM XE_ERR_RANG WHERE FLAG = 'H' ) as cnt
FROM DUAL;
我们也可以只使用SUM来计算计数差异,如下所示。
select ( ( select sum(1) XE_ERR_OVLP WHERE FLAG = 'E' )
- ( select sum(1) XE_ERR_RANG WHERE FLAG = 'H' )
) cnt from dual;