时间戳转换器

mysql查询a表中不存在于b表中的所有符合条件的数据(代码片段)

日期:2022-12-13     来源:adolph2715    作者:adolph2715    浏览:725    java教程

本文目录

1、mysql查询a表中不存在于b表中的所有符合条件的数据(代码片段)

2、(转)查询ab表中,a表中存在b表不存在的数据

在开发过程中,总有一些需求是需要查看在A表中ID不存在于B表中的ID的情况:

下面有三种方法可以实现这一需求:

第一种:使用Not in 方法通过子查询的结果集来做过滤:

select * from A where 1=1 AND A.ID not in (select ID from  B )

这种情况最常见也是最容易理解的逻辑SQL代码,但是会有很多问题出现。

首先,这种情况是针对数据量比较小的情况使用的,原因在于IN 和 NOT IN并不是针对索引进行查询的,操作效率相对较慢。可以通过使用NOT EXISTS 关键字进行优化,相对IN来说EXISTS的效率要高一些,应该在开发过程中尽量少使用in,并改为left join左连接进行查询过滤。

其次,使用not in 会出现查询结果不符合预期的情况:(测试了很多遍发现原因是因为子查询结果集中存在NULL值)

所以在使用in的时候,需要注意下面两种情况:

1.在使用IN 和 NOT IN 时要注意 IN范围中有NULL和空值的情况

2.在where语句中考虑NULL的同时要考虑空字符串的情况

第二种:在卡法中最常见的left join 方法,实现数据的过滤。

SELECT * FROM A LEFT JOIN B ON A.Id=B.Id  WHERE 1=1 AND B.Id IS NULL; 

第三种:查询速度最快,在应用到插入数据时,可在避免重复插入相同数据时又可以获取较快的时效,速度比上两个快非常多,但是不常见。

SELECT * FROM A WHERE  1=1 AND (SELECT COUNT(1) FROM B WHERE A.Id=B.Id)=0;

 

(转)查询ab表中,a表中存在b表不存在的数据

相关文章

根据条件把a表数据更新到b表中一个字段中(查询更新)

{问题:a表中有单位,b表中也有单位,现在要替换a表中的所有单位编号,需要查询B表(相当于单位表)mysql和SqlServer都可以使用UPDATEsys_teleuserasetdeptcode=(selectDISTINCTdept_idfromsys_deptbwhereb.dept_name=a.DeptName)}

mysql查询~存在一个表而不在另一个表中的数据(代码片段)

{ A、B两表,找出ID字段中,存在A表,但是不存在B表的数据。A表总共13w数据,去重后大约3W条数据,B表有2W条数据,且B表的ID字段有索引。方法一  使用notin,容易理解,效率低 ~执行时间为:1.395秒~1selectdistinctA.IDfromAwhereA....}

添加查询中不存在的列

{】添加查询中不存在的列【英文标题】:AddingAColumnthatdoesn\'texistinaquery【发布时间】:2011-08-0202:39:49【问题描述】:我想在查询中添加一个表中不存在的列并将其作为结果返回。所以假设TABLE_TEST有A、B列,我想返回A、B和C的值。...}

选择另一个表中不存在的值

{】选择另一个表中不存在的值【英文标题】:selectavaluewhereitdoesn\'texistinanothertable【发布时间】:2011-02-2717:59:14【问题描述】:我有两张桌子表A:ID1234表B:ID123我有两个请求:我想选择表A中表B没有的所有行,在本例中为第4行。...}

MySQL内部连接查询以获取其他表中不存在的记录

{】MySQL内部连接查询以获取其他表中不存在的记录【英文标题】:MySQLInnerJoinQueryToGetRecordsNotPresentinOtherTable【发布时间】:2012-04-1420:00:28【问题描述】:我有表1,all_countries,如下-id|country------------------1|USA2|China3|India4|France5|UK6|Aust...}

如何获取一个MySql表中存在的记录而不是另一个[重复]

{...布时间】:2013-09-1405:53:09【问题描述】:我需要编写一个查询来返回存在于一个MySql表中但不存在于另一个表中的记录。在这个例子中,我想要所有存在于wafer_log表中但不存在于bt_log表中的晶圆。这是我正在使用的}

mysqli内部连接:其他表中不存在数据

{】mysqli内部连接:其他表中不存在数据【英文标题】:mysqliinnerjoin:datanotexistinothertable【发布时间】:2017-11-1100:28:47【问题描述】:我有3个表,我正在使用内部联接从表中获取数据。selectb.pic,b.fname,b.lname,a.job_id,a.uid,a.job_title,a.desc...}

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

{原文地址:exp导出一个表中符合查询条件的数据 作者:charsi 导出一个表中的部分数据,使用QUERY参数,如下导出select*fromtestwhereobject_id>50000这个条件中的数据exp charsi/[email protected] tables=(TEST)query="‘whereobject_i...}

MySQL:如果表中不存在则插入记录[重复]

{...间】:2011-03-1100:29:43【问题描述】:我正在尝试执行以下查询:INSERTINTOtable_listnames(name,address,tele)VALUES(\'Rupert\',\'Somewhere\',\'022\')WHERENOTEXISTS(}

获取表中不存在的 ID 列表

{...er1a2b3c4d5e6f7g我有列表(1,3,9,2,4,86),我想要一个返回(9,86)的查询。我唯一能想到的,就是建}

Copyright ©2021 时间戳转换器 小常识 114pp | 陕ICP备18005036号