3.7 检测两个表中是否有相同的数据

问题:要知道两个表或视图中是否有相同的数据(基数和值)。考虑这个视图:

create view V
as
    select * from emp where deptno !=10
        union all
    select * from emp where ename = ‘WARD‘

现要检测这个视图与表emp中的数据是否完全相同。员工“WARD”行重复,说明解决方案不仅要显示不同行,还要显示重复行。

解决方案:
1.首先,查找出表emp中存在而试图v中没有的行
2.然后合并(union all)在视图V中存在,而在表emp中没有的行。

select * from
    (
        select e.empno,e.ename,e.job,e.mgr,e.hiredate,
            e.sal,e.comm,e.deptno,count(*)  as cnt
        from emp e
        group by empno,ename,job,mgr,hiredate,sal,comm,deptno
    ) e
where not exists
    (
    select null from
        (
            select v.empno,v.ename,v.job,v.mgr,v.hiredate,v.sal,v.comm,v.deptno
                count (*) as cnt
            from v
            group by empno,ename,job,mgr,hiredate,sal,comm,deptno
        )v
        where v.empno = e.empno
            and v.ename = e.ename
            and v.job = e.job
            and v.mgr = e.mgr
            and v.hiredate = e.hiredate
            and v.sal = e.sal
            and v.deptno = e.deptno
            and v.cnt = e.cnt
            and coalesce(v.comm.0) = coalesce(e.comm,0)
    )
    union all

select * from
    (
        select e.empno ,e.ename,e.ename,e.job,e.mgr,e.hiredate,e.sal ,e.comm,e.deptno,count(*) as cnt
        from v
        group by empno,ename,job,mgr,hiredate,sal,comm,deptno
    )v
    where not exists (
        select null from (
            select e.empno,e.ename,e.job,e.mgr,e.hiredate,e.sal,e.comm,e.deptno,count(*) as cnt
            from emp e
            group by empno,ename,job,mgr,hiredate,sal,comm,deptno
            )e
        where v.empno = e.empno
            and v.ename = e.ename
            and v.job = e.job
            and v.mgr = e.mgr
            and v.hiredate = e.hiredate
            and v.sal = e.sal
            and v.deptno = e.deptno
            and v.cnt = e.cnt
            and coalesce(v.comm.0) = coalesce(e.comm,0)

);

时间: 2024-10-14 06:46:56

3.7 检测两个表中是否有相同的数据的相关文章

3.07 检测两个表中是否有相同的数据

问题:要知道两个表或视图中是否有相同的数据(基数和值).考虑这个视图: create view Vas     select * from emp where deptno !=10        union all    select * from emp where ename = 'WARD' 现要检测这个视图与表emp中的数据是否完全相同.员工"WARD"行重复,说明解决方案不仅要显示不同行,还要显示重复行. 解决方案:1.首先,查找出表emp中存在而试图v中没有的行2.然后合

Oracle 取两个表中数据的交集并集差异集合

Oracle 取两个表中数据的交集 关键字: Oracle 取两个表中数据的交集 INTERSECT Oracle 作为一个大型的关系数据库,日常应用中往往需要提取两个表的交集数据 例如现有如下表,要求找出工资2500(不含2500)以上并且是男性(M)的员工编号,那么就要利用这两个表的关系做一个交集了 employee CODE NAME GENDER 001 Tom M 002 Jerry M 003 Ana F salary CODE SALARY 001 2800 002 2500 00

查询两个表中不同(相同)的数据,并把它们显示出来

查询两个表中不同的数据select ecs_brand.brand_id,ecs_brand.brand_name from 表名ecs_brand where ecs_brand.brand_id not in (select distinct ecs_goods.brand_id from 表名ecs_goods where ecs_goods.is_on_sale = 1 AND ecs_goods.is_alone_sale = 1 AND ecs_goods.is_delete = 0

mysql5.7基础 向指定数据库的指定表中插入符合要求的数据

镇场文:       学儒家经世致用,行佛家普度众生,修道家全生保真,悟易理象数通变.以科技光耀善法,成就一良心博客.______________________________________________________________________________________________________ Operating System:UbuntuKylin 16.04 LTS 64bitmysql: Ver 14.14 Distrib 5.7.17, for Linux (

exp导出一个表中符合查询条件的数据

原文地址:exp导出一个表中符合查询条件的数据 作者:charsi 导出一个表中的部分数据,使用QUERY参数,如下导出select * from test where object_id>50000这个条件中的数据exp charsi/[email protected] tables=(TEST) query="'where object_id>50000'" file=aaa.dmp log=aaa.log 其他参数含义:GRANTS:指定是否导出对象的授权信息,默认参

解决在mysql表中删除自增id数据后,再添加数据时,id不会自增1的问题

https://blog.csdn.net/shaojunbo24/article/details/50036859 问题:mysql表中删除自增id数据后,再添加数据时,id不会紧接.比如:自增id 1 2 3 4 现在删除4,就变成了 1 2 3 这时候,如果增加一条数据,会变成 1 2 3 5 上面5不是我们想要的结果,4才是理想的id,解决方法是,在删除4之后,执行下面的sql语句: ALTER TABLE table_name AUTO_INCREMENT = 1; 原文地址:http

SQL向一个表中批量插入&&删除大量数据

插入: 1. 数据从另一个表中获取 (1)两表结构不一样insert into tb1 需要的列名 select 按照前面写上需要的列名 from tb2(2)两表结构一样insert into tb1 * select * from tb2 2. 数据直接输入 (1) INSERT INTO MyTable(ID,NAME) VALUES(1,'123');INSERT INTO MyTable(ID,NAME) VALUES(2,'456');INSERT INTO MyTable(ID,N

第四章:Django模型——在Event表中显示出更多的数据

1. 为了使表中显示出 更多的字段 , 所以要修改 sign/admin 中的文件 2. 解释一下相关的内容: Django 提供了大量选项针对特别的模块自定义管理工具.

查看Oracle表中的指定记录在数据文件中的位置

查看Oracle表中的指定记录位置select rowid,user_id from sshr.xx_user where user_id=3010586 select rowid,       dbms_rowid.rowid_object(rowid) object_id,              dbms_rowid.rowid_relative_fno(rowid) file_id,              dbms_rowid.rowid_block_number(rowid) b