美文网首页
第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