视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
怎样查询两个表中同一字段的不同数据值
2020-11-09 08:55:02 责编:小采
文档

怎样查询两个表中同一字段的不同数据值

例如:

A表中的字段a有40000条数据
B表中的字段a有60000条数据,其中的40000条数据跟A表是一样的
怎样能把那不一样的20000条数据查询出来啊?

--建表table1,table2:

create table table1(id int,name varchar(10)); 
create table table2(id int,score int); 
insert into table1 select '1','lee';
insert into table1 select '2','zhang';
insert into table1 select '3','steve';
insert into table1 select '4','wang'; 
insert into table2 select '1','90'; 
insert into table2 select '2','100'; 
insert into table2 select '3','70';

如表

-------------------------------------------------
table1
-------------------------------------------------
id name
1 lee
2 zhang

3 steve
4 wang

-------------------------------------------------

table2

-------------------------------------------------

id score
1 90
2 100

3 70

-------------------------------------------------

(1)左向外联接的结果集包括 left outer 子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值(null)。

(2)sql语句

select * from table1 t1 left join table2 t2 on t1.id = t2.id

3 steve 3 70-------------结果-------------
id name id score
------------------------------
1 lee 1 90
2 zhang 2 100

4 wang null null
------------------------------

注释:包含table1的所有子句,根据指定条件返回table2相应的字段,不符合的以null显示

(3)那么获取差值

1select * from table1 t1 left join table2 t2 on t1.id = t2.id WHERE t2.id is null

-------------结果-------------
id name id score

4 wang null null
------------------------------

下面是工作中实际遇到的情况:

##过滤出0销售人员(即没有销售记录的员工信息列表)。

#销售人员(用户角色中间表)

1select userid from bbscs_role_user where roleid = 'sales'

# ---> 11条记录

#统计表(用户销售记录表)

1select refid from bbscs_sales_income_stat where type = 4 and month = '2012-02' and amount != 0

# ---> 4条记录

要求为:另外7个销售人员的记录列出来为目的。

##########这个是SQL语句模型 BEGIN##########

1select * from b t2 left join a t1 on t1.a1 = t2.b1 WHERE t1.a1 is null

#########这个是SQL语句模型 END############

说明:左表是数据多的那个表(基准表如b表)。left join查询。where条件是右边的那个表(a表)某个字段(a1)为Null作为(判断字段)

##将SQL返回结果作为临时表来查询

123select * from (select userid from bbscs_role_user where roleid = 'sales') t2 left join (select refid from bbscs_sales_income_stat where type = 4 and month = '2012-02' and amount != 0) t1 on t2.userid = t1.refid WHERE t1.refid is null

# --->7条记录

测试一:

##SQL语句,mysql 查询两个表中不同的值(主要是差值) 这个语句查询还是存在问题。

12select t1.Userid from bbscs_role_user t1 left join bbscs_sales_income_stat t2 on t1.userid = t2.refid and t1.roleid = 'sales' and t2.type = 4 and t2.month = '2012-02' and t2.amount != 0 where t2.id is null;

##表与表,条件与条件出来。

# --->1记录

测试二:

12select t1.Userid from bbscs_role_user t1 left join bbscs_sales_income_stat t2 on t1.userid = t2.refid and t1.roleid = 'sales' and t2.type = 4 and t2.month = '2012-02' and t2.amount != 0 and t2.id is null

##where or and 区别

# --->22条记录

###更为强大的临时表查询功能,将以上查询结果作为一个整体放入。

##跟用户部门中间表关联,按部门id排序显示。

123select t4.userid from( select * from (select userid from bbscs_role_user where roleid = 'sales') t2 left join (select refid from bbscs_sales_income_stat where type = 4 and month = '2012-02' and amount != 0) t1 on t2.userid = t1.refid WHERE t1.refid is null ) t3, bbscs_org_user t4 where t3.userid = t4.userid order by orgId

下载本文
显示全文
专题