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','');
网友评论