oracle 查找表之间的差异

w8ntj3qf  于 2022-11-22  发布在  Oracle
关注(0)|答案(1)|浏览(127)

我正在尝试计算oracle sql developer上两个表之间的计数差异,有人能提供一些指导吗?
先谢了
没有试过任何脚本

j0pj023g

j0pj023g1#

一个(不错?)选项是使用两个选择作为CTE,然后您有各种选项可用,例如:

SQL> with
  2  c1 as (select count(*) cnt from emp),
  3  c2 as (select count(*) cnt from dept)
  4  select c1.cnt,
  5         c2.cnt,
  6         c1.cnt - c2.cnt as difference
  7  from c1 cross join c2;

       CNT        CNT DIFFERENCE
---------- ---------- ----------
        14          4         10

SQL>

如果您定期收集表的统计信息(并且在此期间表没有被更改(插入或删除)),您甚至可以使用user_tables视图的num_rows列:

SQL> select e.num_rows emp_rows,
  2         d.num_rows dept_rows,
  3         e.num_rows - d.num_rows difference
  4  from user_tables e cross join user_tables d
  5  where e.table_name = 'EMP'
  6    and d.table_name = 'DEPT';

  EMP_ROWS  DEPT_ROWS DIFFERENCE
---------- ---------- ----------

啊?没有数据?为什么?缺少统计数据!让我们收集它们:

SQL> exec dbms_stats.gather_table_stats('SCOTT', 'EMP');

PL/SQL procedure successfully completed.

SQL> exec dbms_stats.gather_table_stats('SCOTT', 'DEPT');

PL/SQL procedure successfully completed.

SQL> select e.num_rows emp_rows,
  2         d.num_rows dept_rows,
  3         e.num_rows - d.num_rows difference
  4  from user_tables e cross join user_tables d
  5  where e.table_name = 'EMP'
  6    and d.table_name = 'DEPT';

  EMP_ROWS  DEPT_ROWS DIFFERENCE
---------- ---------- ----------
        14          4         10

SQL>

现在它 * 工作 *。

相关问题