mysql 查两个表之间的数据差集

需要查两个表之间的差集 , 首先,想到的是主键直接not in

select  mailbox_id  from  co_user where mailbox_id  not  in (select  mailbox_id  from  core_mailbox);

好吧!这个是可以,但是数据多了的话,想到这个查询的逻辑有点受不住

于是再改为下面的这样:

select  cu.mailbox_id, cm.mailbox_id   from   co_user   as   cu   left   join   core_mailbox as  cm  on  cu.mailbox_id  =  cm.mailbox_id  where  cm.mailbox_id   is  NULL;

利用了left join的,然后进行对比,并且利用where进行筛选。

后面也在网上找了这条:

SELECT   mailbox_id  FROM   `co_user`   left  join  (select  mailbox_id  as  i  from  core_mailbox)  as  t1   on  co_user.mailbox_id  =  t1.i  where  t1.i  is  NULL;

概念上与第二条同理。

好吧! 回顾了一下left join

SQL LEFT JOIN 关键字

LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

j= 'qishu_books_sort01'

i= 'qishu_detail_sort01'

# sql = '''

# select Novel_name from(select Novel_name from %s GROUP BY Novel_name ORDER BY Novel_ID ASC)as t where Novel_name not in(select TXT_name from %s);

# ''' %(j,i)

sql= "select Novel_name,TXT_name from(select Novel_name from %s GROUP BY Novel_name ORDER BY Novel_ID ASC) as cu left join %s as cm on Novel_name = TXT_name where TXT_name is NULL;"%(j,i)

cursor.execute(sql)

NoveID_list= cursor.fetchall()

print(NoveID_list)

print(len(NoveID_list))

你可能感兴趣的:(mysql 查两个表之间的数据差集)