A、B两表,找出ID字段中,存在A表,但是不存在B表的数据。A表总共13w数据,去重后大约3W条数据,B表有2W条数据,且B表的ID字段有索引。
使用 not in ,容易理解,效率低 ~执行时间为:1.395秒~
1 select distinct A.ID from A where A.ID not in (select ID from B)
使用 left join...on... , "B.ID
is
null" 表示左连接之后在B.ID 字段为 null的记录 ~执行时间:0.739秒~
1 select A.ID from A left join B on A.ID=B.ID where B.ID is null
逻辑相对复杂,但是速度最快 ~执行时间: 0.570秒~
1 select * from B
2 where (select count(1) as num from A where A.ID = B.ID) = 0
转载自:http://blog.csdn.net/windren06/article/details/8188136
A、B两表,找出ID字段中,存在A表,但是不存在B表的数据。A表总共13w数据,去重后大约3W条数据,B表有2W条数据,且B表的ID字段有索引。方法一 使用 not in ,容易理解,效率低 ~执行时间为:1.395秒~1 select distinct A.ID from A where A.ID not in (select ID from B)方法二
本文实例讲述了
mysql
实现
查询
数据
并根据条件更新到另
一张
表
的方法。分享给大家供大家参考,具体如下:
原本的
数据
库有3张
表
travel_way :旅游线路
表
,存放线路的具体信息
traveltag :线路标签
表
,存放线路目的地等信息
tagrelation:标签对应
表
,存放线路和目的地的对应关系
因为业务逻辑的改变,现在要把它们合并为
一张
表
,把traveltag中的目的地信息插入到travel_way中。
首先获取到所有线路对应的目的地,以线路ID分组,合并目的地到一行,以逗号分隔。
代码如下:
SELECT
travel_way.id,GROUP_CONCAT(travelta
mysql
数据
库中
一张
表
与另
一张
表
有相同的
一个
字段,需要过滤出
表
t_camera 中在 t_sys_role_camera
表中
不存在
的
数据
,利用关键字 NOT EXISTS来实现。
同理可以使用EXISTS 关键字来
查询
一张
表
在另
一张
表中
存在
的
数据
。
SELECT
t_camera t
WHERE
NOT EXISTS (
SELECT
t_sys_role_camer
SQL Join子句,主要用在
select
语句中,把两个或多个
表
的行结合起来,基于这些
表
之间的共同字段(往往是id字段)来
查询
,从多个
表中
返回满足条件的所有行。常见join子句类型常见join子句类型有INNER JOIN(同JOIN)、LEFT JOIN、RIGHT JOIN、FULL JOIN,其中第一种为内连接,后三种为外连接。不同的join子句类型区别如下图所示:
介绍其中4种:
1、方法一(仅适用单个字段):使用 not in ,比较容易理解,缺点是效率低
如:
select
A.ID fro
SQL的语言分类
DQL(Data Query Language):
数据
查询
语言
select
DML(Data Manipulate Language):
数据
操作语言 insert 、update、delete
DDL(Data Define Languge):
数据
定义语言 create、drop、alter
TCL(Transaction Control Language):事务控制语言 commit、rollback
SQL的常见命令
show databases; 查看所有的
数据
库
use 库名
sql例子:
SELECT
table_name FROM information_schema.TABLES WHERE table_name ='t_iov_vehicle_owner_info'
不存在
:
备注,sql也可以这样写:
select
count(*) from information_s
一张
表
与另
一张
表
有相同的
一个
字段,需要过滤出
表
law_firm 中在 push_record
表中
不存在
的
数据
,利用关键字 NOT EXISTS来实现。
同理可以使用 EXISTS 关键字来
查询
一张
表
在另
一张
表中
存在
的
数据
。
SELECT
law_firm f
WHERE
NOT EXISTS (
SELECT
push_record p
WHERE
MySQL
查询
表中
不存在
的id
要
查询
的id数组:[ 0, 1, 2, 3, 4, 5, 10000000, 10000001 ]
表中
存在
的id值:1, 2, 3, 4, 5
查询
结果:
SELECT
t3.id
SELECT
SUBSTRING_INDEX(SUBSTRING_INDEX(ids, ',', ht.help_topic_id), ',', -1) AS id
A、B两
表
,找出ID字段中,
存在
A
表
,但是
不存在
B
表
的
数据
。A
表
总共13w
数据
,去重后大约3W条
数据
,B
表
有2W条
数据
,且B
表
的ID字段有索引。
使用 not in ,容易理解,效率低 ~执行时间为:1.395秒~
1
select
distinct A.ID from A where A.ID not in (
select
ID from B)
使用 left join...on... , "B.IDisnull"
表
示左连接之后在B.ID 字段为 null...
当时有50万条
数据
,同步了41万条
用
select
*from A where id not in (
select
b.id from b) 用了好几个小时都没有结果,最后几次还把我电脑搞黑屏了
后来找到的方式是用NOT EXISTS
查询
的最后
查询
成功
SELECT
* FROM A WHERE NOT EXISTS (
SELECT
1 FROM BWHERE A.id= B
[code=sql]
2023/01/13 17:07:23 /root/xxxxxx_sql.go:230 SLOW SQL >= 200ms
[2806.016ms] [rows:0] delete from A where (select count(1) from B where A.apid = B.apid)=0
2023/01/13 17:07:23 /root/xxxxxx_sql.go:231 SLOW SQL >= 200ms
[628.513ms] [rows:0] delete from A where apid not in (select apid from B);
[/code]
MYSQL查询~ 存在一个表而不在另一个表中的数据
lg1873868:
基于VirtualBox虚拟机安装Ubuntu图文教程
Chin_chilla:
基于VirtualBox虚拟机安装Ubuntu图文教程
herbal_medicine:
基于VirtualBox虚拟机安装Ubuntu图文教程
八皇后OS: