美文网首页
第16讲积累 SQL查询~ 存在一个表而不在另一个表中的数据 更

第16讲积累 SQL查询~ 存在一个表而不在另一个表中的数据 更

作者: 有时有晌 | 来源:发表于2019-04-29 17:58 被阅读0次

A、B两表,找出ID字段中,存在A表,但是不存在B表的数据。A表总共13w数据,去重后大约3W条数据,B表有2W条数据,且B表的ID字段有索引。

方法一

使用 not in ,容易理解,效率低 执行时间为:1.395秒

select distinct A.ID from  A where A.ID not in (select ID from B)

方法二

使用 left join...on... , "B.ID isnull" 表示左连接之后在B.ID 字段为 null的记录 执行时间:0.739秒

select A.ID from A left join B on A.ID=B.ID where B.ID is null

图解


image

方法三

逻辑相对复杂,但是速度最快 ~执行时间: 0.570秒~

select * from  B where (select count(1) as num from A where A.ID = B.ID) = 0

从bookchaptercontent中查询字段并

  • SUBSTRING_INDEX(str,delim,count)
    返回从字符串str的第count个出现的分隔符delim之后的子串。如果count是正数,返回最后的分隔符到左边(从左边数) 的所有字符。如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)
SELECT SUBSTRING_INDEX(book_chapter_id,'/',-1) FROM bookchaptercontent;



从bookchaptercontent中查询字段并

  • SUBSTRING_INDEX(str,delim,count)
    返回从字符串str的第count个出现的分隔符delim之后的子串。如果count是正数,返回最后的分隔符到左边(从左边数) 的所有字符。如果count是负数,返回最后的分隔符到右边的所有字符(从右边数)

并替换不需要的数据

SELECT REPLACE(SUBSTRING_INDEX(book_chapter_id,'/',-1),'.html','') FROM bookchaptercontent;



根据数据库中一个字段处理后赋值给另一个字段


update bookchaptercontent set bookchaptercontent.book_chapter_info_id= REPLACE(SUBSTRING_INDEX(book_chapter_id,'/',-1),'.html','') where bookchaptercontent.id='1';

统一:

SELECT REPLACE(SUBSTRING_INDEX(book_chapter_id,'/',-1),'.html','') FROM bookchaptercontent;

UPDATE bookchaptercontent SET book_chapter_info_id = (SELECT REPLACE(SUBSTRING_INDEX(book_chapter_id,'/',-1),'.html','') FROM bookchaptercontent);


update bookchaptercontent set bookchaptercontent.book_chapter_info_id= REPLACE(SUBSTRING_INDEX(book_chapter_id,'/',-1),'.html','');

相关文章

网友评论

      本文标题:第16讲积累 SQL查询~ 存在一个表而不在另一个表中的数据 更

      本文链接:https://www.haomeiwen.com/subject/bujunqtx.html