SQL * Plus:两个表中行数的差异

时间:2011-01-17 07:30:37

标签: sql oracle oracle11g sqlplus

如何区分两个不同表中的行数?

SQL> select count(*) from dual44;

  COUNT(*)
----------
         3

SQL> select count(*) from dual;

  COUNT(*)
----------
         1

SQL> (select count(*) from dual44)
  2  minus
  3  (select count(*) from dual)
  4  ;

  COUNT(*)
----------
         3

SQL> 

我需要2作为结果。这两张表可能不一定具有相同的情感。

5 个答案:

答案 0 :(得分:5)

减运算符用于删除第二个结果集中包含的所有第一个结果集的记录。在这里使用 - (破折号)运算符。

select ((select count(*) from dual44) - (select count(*) from dual)) from dual

答案 1 :(得分:0)

select count(*) - (select count(*) from dual)
from dual44

MINUS是一个SQL集合操作,这里不需要,只需使用-

答案 2 :(得分:0)

SELECT (a.count-b.count)
 FROM
   (SELECT COUNT(*) count FROM dual44) a,
   (SELECT COUNT(*) count FROM dual) b;

答案 3 :(得分:0)

以下内容非常快(对于数百万条记录的表,不到1秒),前提是您的统计信息是最新的(强烈建议)。

select 
(
(select u.NUM_ROWS from user_tables u where u.TABLE_NAME='JOBS')
 - 
(select u.NUM_ROWS from user_tables u where u.TABLE_NAME='COUNTRIES')
 ) DIFF
from dual


     DIFF
----------
        -6

示例代码适用于ORACLE的HR模式。您可以更改表名。

这两个表可能不一定具有相同的架构。

编辑Jeffrey Kemp的评论:

如果表位于不同的模式上,则必须使用dba_tables,如果您拥有权限。

只需将架构名称添加到表名称即可。即HR.JOBS

答案 4 :(得分:-1)

Sqlite 中,这样可行:

Select (Select count(col1) from Table1) - (Select count(col2) from Table2))