我正在尝试计算oracle sql developer上两个表之间的计数差异,有人能提供一些指导吗?先谢了没有试过任何脚本
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列:
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>
现在它 * 工作 *。
1条答案
按热度按时间j0pj023g1#
一个(不错?)选项是使用两个选择作为CTE,然后您有各种选项可用,例如:
如果您定期收集表的统计信息(并且在此期间表没有被更改(插入或删除)),您甚至可以使用
user_tables
视图的num_rows
列:啊?没有数据?为什么?缺少统计数据!让我们收集它们:
现在它 * 工作 *。