mysql 获取一张表中, 另一张表不存在的数据

编写sql语句中,经常需要编写获取一张数据表中不存在与另一张表的数据,相关编写方法如下:

方法1: 使用not in ,效率低下,在数据较小的情况下可以采用如下编写

SELECT
*
FROM a
WHERE 1=1
AND a.Id NOT IN(
     SELECT
         Id
     FROM
          B
     WHERE
         B.IsDeleted=0
     GROUP BY B.Id
); 

方法2:使用left join  较第一种方法快

SELECT
    *
FROM a
LEFT JOIN b ON a.Id=b.Id
WHERE 1=1
AND b.Id IS NULL; 

方法3:速度最快,在应用到插入数据时,可在避免重复插入相同数据时又可以获取较快的时效,,速度比上两个快非常多

SELECT
   *
FROM a
WHERE
     1=1
     AND (
            SELECT
                   COUNT(1)
            FROM b
            WHERE a.Id=b.Id

     )=0;

以上方法仅供参考,如有不正确之处及更快的方法,请留言指出,谢谢!

原文地址:https://www.cnblogs.com/zty-Love/p/9894799.html

时间: 2024-11-03 22:54:43

mysql 获取一张表中, 另一张表不存在的数据的相关文章

获取Excel工作薄中Sheet页(工作表)名集合

#region 获取Excel工作薄中Sheet页(工作表)名集合 /// <summary> /// 获取Excel工作薄中Sheet页(工作表)名集合 /// </summary> /// <param name="excelFile">Excel文件名及路径,EG:C:\Users\JK\Desktop\导入测试.xls</param> /// <returns>Sheet页名称集合</returns> pr

3.05 在一个表中查找与其他表不匹配的记录

问题:对于具有相同关键字的两个表,要在一个表中查找与另外一个不匹配的行.例如,要查找没有职员的部门. 要查找部门中每个员工的工作岗位需要在表需要在表deptno及emp中有一个等值联接.deptno列就是这两个表之间的公共值.但是,等值联接却不能直接显示出那个部门没有员工.这是因为在表emp和dept正在等值联接时,将会返回满足联接条件的所有行.可是我们只需要那些在表dept中不满足联接条件的行. 尽管乍看起来这个问题同前一个问题类似,但是要更复杂一些.其不同之处就是在前一个问题中,需要列出在表

MySQL 获取某个时间段每一天、每一个小时的统计数据

获取每一天的统计数据做项目的时候需要统对项目日志做分析,其中有一个需求是获取某个给定的时间段内,每一天的日志数据,比如说要获取从2018-02-02 09:18:36到2018-03-05 23:18:36这个时间段内,统计出每一天的日志数据,一般情况下,看到这种需求都是考虑使用函数来搞定,直接上sql语句 SELECT DATE_FORMAT(trigger_time, '%Y-%m-%d') triggerDay, COUNT(id) triggerCount FROM `job_qrtz_

SqlSever基础 insert 给一个数据库中的表中的一个列一次性添加多行数据

1 code 1 --select * from sysdatabases 2 3 --指定数据库 4 use helloworld 5 --查看该数据库中的Teacher表格列有哪几个 6 select * from Teacher 7 -- 向 teacher表格中的ShengHao一次加入两行数据 8 insert into Teacher(ShengHao) 9 values('女娲娘娘'), 10 ('无盐娘娘') 11 2 show

mysql5.7基础 insert 表中含有自动增长的字段,插入数据时用NULL

礼悟:    公恒学思合行悟,尊师重道存感恩.叶见寻根三返一,江河湖海同一体.          虚怀若谷良心主,愿行无悔给最苦.读书锻炼养身心,诚劝且行且珍惜. 数据.数据,命根就在数据.操作数据库一定要谨慎小心.给最苦 这里的代码,看看就好,要有自己的判断.遇到抉择,要不耻上下问. mysql:5.7                     os:Windows7 x64 代码及效果 mysql> desc t2; +-------+-------------+------+-----+--

SQL笔试题:在BORROW表上建立一个触发器,完成如下功能:如果读者借阅的书名是&quot;b002&quot;,就将该读者的借阅记录保存在BORROW_SAVE表中(注ORROW_SAVE表结构同BORROW表)

CREATE TRIGGER TR_BORROW ON BORROWAFTER INSERTASIF((SELECT I.BNO FROM INSERTED I) in(SELECT BNO FROM BOOKS WHERE BNAME='b002'))BEGININSERT BORROW_SAVESELECT * FROM INSERTED IPRINT '已经备份该记录'ENDELSEBEGINPRINT '未备份该记录'END

MySQL查询数据表中数据记录(包括多表查询)

MySQL查询数据表中数据记录(包括多表查询) MySQL查询数据表中数据记录(包括多表查询) 转自:http://www.baike369.com/content/?id=5355 在MySQL中创建数据库的目的是为了使用其中的数据. 使用select查询语句可以从数据库中把数据查询出来. select语句的语法格式如下: select selection_list // 要查询的内容,选择哪些列 from table_list // 从什么表中查询,从何处选择行 where primary_

动态列从一表的数据汇总至另外一张表中

这段时间有涉及至MS SQL的编程,动态的SQL语句.原始数据表中,很多数据,需要把有数据的记录进行统计,并需要进行列显示,也就是是行列转换.有数据才显示,也就是说最终的列是动态变化的.有数据才显示. 把所有有数据的放在一张临时表中,只需要将转换列名的数据即可. 然后根据这个临时表,来处理动态SQL的语句,有SELECT列,宣告变量,变量赋值以及更新的. 上面的几行,在运行时得到的结果和格式如下,随数据不同列名也有所不同: 接下来,你可以看到Insus.NET进动态去引用这些变量的,在EXECU

把一个表中的数据导入到另一个表中

最近,需要对表中的数据进行操作.或者将表中的数据导入到另一张表中,或者将表中的数据生成insert脚本. 假如目标表存在 INSERT INTO 目标表名称 SELECT * FROM 来源表 假如目标表不存在 select * into 目标表名称 from 来源表 直接生成insert语句 select 'insert into 目标表 (字段1,字段2) values ('''+字段1+''','''+字段2+''');' sql_str from 目标表;

一个表中的某字段中所有的数据,复制到另一个表中

项目要求,织梦被黑了,又不太会修复织梦的漏洞.决定换一个自己开发的后台吧!问题来了,织梦中的文章数据要全部拿出来,导入到新的后台中. 因为,现有后台的数据表跟织梦的表的结构完全不一样,再加上织梦用于保存文章是用了,dede_addonarticle,dede_archives,这两个表.现在是要将两个表中有用的字段的数据 复制到一个新的表中的一个字段内. 第一步,同步他们的主键,dede_addonarticle的主键是aid,dede_archives的主键是id 1,一张写好了结构的,没有数