2

尝试计算 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;

如何实现?

4

4 回答 4

7

那是:

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

于 2018-05-23T15:13:52.450 回答
1

你可以使用UNION ALLand 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;
于 2018-05-23T15:16:25.180 回答
1

您需要添加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;
于 2018-05-23T15:14:42.153 回答
0

我们也可以只使用SUM来计算计数差异,如下所示。

select ( ( select sum(1) XE_ERR_OVLP WHERE FLAG = 'E' ) 
       - ( select sum(1) XE_ERR_RANG WHERE FLAG = 'H' ) 
    ) cnt from dual;
于 2018-10-29T18:41:00.447 回答