在Oracle中使用SQL检查表是否相同

雅克·特罗钦斯基(JacekTrociński)

在初级Oracle开发人员职位的面试中有人问我这个问题,面试官承认这是一个艰难的过程:

编写查询以检查表'employees_hist'是否与表'employees'完全相同。任何想法如何去做?

编辑:考虑到表可以有重复的记录,因此在这种情况下,简单的MINUS将不起作用。

例子

EMPLOYEES

NAME
--------
Jack Crack
Jack Crack
Jill Hill

这两个是不一样的。

EMPLOYEES_HIST

NAME
--------
Jack Crack
Jill Hill
Jill Hill
垃圾箱

解决重复项的一种可能解决方案是创建一个子查询,该子查询对两个表执行UNION,并通过对所有列进行分组来包括每个表中包含的重复项数量。然后,外部查询可以对所有列进行分组,包括行计数列。如果表匹配,则不应返回任何行:

create table employees (name varchar2(100));
create table employees_hist (name varchar2(100));

insert into employees values ('Jack Crack');
insert into employees values ('Jack Crack');
insert into employees values ('Jill Hill');
insert into employees_hist values ('Jack Crack');
insert into employees_hist values ('Jill Hill');
insert into employees_hist values ('Jill Hill');


with both_tables as
(select name, count(*) as row_count
 from employees
 group by name
union all
 select name, count(*) as row_count
 from employees_hist
 group by name)
select name, row_count from both_tables
group by name, row_count having count(*) <> 2;

给你:

Name        Row_count
Jack Crack  1
Jack Crack  2
Jill Hill   1
Jill Hill   2

这告诉您两个名称在一个表中出现一次,在另一个表中出现两次,因此表不匹配。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Oracle中使用SQL检查表是否相同

来自分类Dev

如何使用SQL检查表中是否存在变量

来自分类Dev

SQL检查表是否存在并截断

来自分类Dev

使用JDBC检查表是否存在

来自分类Dev

使用JDBC检查表是否存在

来自分类Dev

检查表元素是否与列名相同

来自分类Dev

检查表的任何行上是否有重叠的日期Oracle SQL

来自分类Dev

检查表在oracle中是否为空

来自分类Dev

如何使用Jquery检查表是否有价值

来自分类Dev

在python中使用正则表达式检查表达式是否有效

来自分类Dev

使用oracle正则表达式子串时检查表中是否存在值

来自分类Dev

Sqlite检查表是否为空

来自分类Dev

检查表的行是否被更改

来自分类Dev

MySQL检查表是否已经存在

来自分类Dev

android检查表是否为空

来自分类Dev

检查表中的索引是否存在

来自分类Dev

检查表数据是否已更改?

来自分类Dev

如何检查表是否已经构造?

来自分类Dev

android检查表是否为空

来自分类Dev

检查表中是否存在行

来自分类Dev

检查表数据是否有输入

来自分类Dev

检查表格是否被过滤

来自分类Dev

如何使用PostgreSQL检查表UNLOGGED?

来自分类Dev

使用DomCrawler检查表行

来自分类Dev

使用JQuery检查表单

来自分类Dev

SQL:如何检查表中是否已存在行组

来自分类Dev

如何检查表中是否已存在sql值以防止重复?

来自分类Dev

SQL查询以检查表中的列是否具有特定值

来自分类Dev

SQL 检查表 1 中的日期是否在表 2 的范围内