查询数据库表名字(表的数据量不同),两个表的字段相同,数据量不相同的表筛选出来
1条回答 默认 最新
关注 这个题目有点歧义,两个表字段相同是指的所有字段名都相同还是只有部分字段名相同?还有字段顺序是否需要考虑?
我先假设你说的是所有字段名都相同且字段顺序也一致的两个表吧,因为部分字段名相同的太多了
然后你也没说你的版本是多少,在不同版本里是可以借用不同的函数来达到同样的效果的,比如下面这个sql在21c版本里可以运行select owner1, table_name1, nvl(x1.num_rows, 0) num_rows1, owner2, table_name2, nvl(x2.num_rows, 0) num_rows2 from (select t1.owner owner1, t1.table_name table_name1, t2.owner owner2, t2.table_name table_name2 from (select a.owner, a.table_name, json_objectagg('k', a.column_name returning varchar2(32767)) c from dba_tab_cols a group by a.owner, a.table_name) t1, (select a.owner, a.table_name, json_objectagg('k', a.column_name returning varchar2(32767)) c from dba_tab_cols a group by a.owner, a.table_name) t2 where t1.c = t2.c and t1.table_name <> t2.table_name) x, dba_tables x1, dba_tables x2 where x.owner1 = x1.owner and x.table_name1 = x1.table_name and x.owner2 = x2.owner and x.table_name2 = x2.table_name and nvl(x1.num_rows, 0) <> nvl(x2.num_rows, 0)
其实主要就是两个处理方向,
一种是按字段一个个匹配,用count条件来判断匹配上的行(字段)和两张表各自的行(字段)是否都相等,相等则说明字段一样;
另外一种方式就是上面这个sql这种,将所有字段按顺序拼成一个值,再来判断这个值是否相等即可。
至于行数,这里是可能存在问题的,这个行数和当前实际行数不一定匹配,必须要收集一次统计信息后行数才会更新解决 无用评论 打赏 举报
悬赏问题
- ¥15 ssh登录页面的问题
- ¥60 渗透一个指定银行app,拿到客户信息,需要什么级别
- ¥50 关于在matlab上对曲柄摇杆机构上一点的运动学仿真
- ¥15 jetson nano
- ¥15 :app:debugCompileClasspath'.
- ¥15 windows c++内嵌qt出现数据转换问题。
- ¥20 公众号如何实现点击超链接后自动发送文字
- ¥15 用php隐藏类名和增加类名
- ¥15 算法设计与分析课程的提问
- ¥15 用MATLAB汇总拟合图