`
simpledev
  • 浏览: 196209 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

mysql left join查询,比较两个表不同的行

    博客分类:
  • SQL
 
阅读更多

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

例如:

A表中的字段a40000条数据
B
表中的字段a60000条数据,其中的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

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

3 steve 3 70
4 wang null null  
------------------------------  

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

(3)那么获取差值

select * 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销售人员(即没有销售记录的员工信息列表)。

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

select userid from bbscs_role_user where roleid = 'sales'

 # ---> 11条记录

 

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

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

 # ---> 4条记录

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

 

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

select * 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返回结果作为临时表来查询

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

 # --->7条记录

 

 

测试一:

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

select 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; ##表与表,条件与条件独立出来。

 # --->18条记录

 

 

测试二:

select 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排序显示。

select 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

 

分享到:
评论

相关推荐

    mysql Join使用以及优化

    INNER JOIN仅返回两个表中匹配的记录,而LEFT JOIN、RIGHT JOIN和FULL JOIN分别返回左表、右表以及两个表中所有的记录,即使某些记录在另一表中没有匹配的记录也会返回。 接下来,关于DBA不让使用Join的问题,其...

    Mysql之innerjoin,leftjoin,rightjoin详解.pdf

    Mysql 之 inner join、left join、right join 详解 Mysql 中的连接查询是指从多个表中检索数据,并将它们组合成一个结果集。...* 查询两个表中的所有记录,并将它们组合成一个结果集,而不管是否有匹配的记录

    mysql多个left join连接查询用法分析

    例如,给定的错误语句中,使用了两个嵌套的子查询,这可能导致全表扫描,消耗大量的计算资源。在这种情况下,我们可以尝试使用多个LEFT JOIN来优化查询,以减少子查询并提高查询效率。 正确的做法是直接将需要连接...

    MySQL 多表关联一对多查询实现取最新一条数据的方法示例

    但是这两个字段却在订单表里面,每次客户下单都会要求客户填写;由此可知,客户数据和订单数据是一对多的关系;那这样的话,问题就来了,我到底以订单中的哪一条数据为准呢?经过协商后一致同意以最新的一条数据为准...

    MySQL Left JOIN时指定NULL列返回特定值详解

    在SQL查询中,LEFT JOIN操作用于连接两个或更多表,并保留左表(即第一个表)的所有记录,即使右表没有匹配的记录。当右表的某些字段在LEFT JOIN后为NULL时,我们可以利用函数来将这些NULL值替换为特定值,如0或其他...

    MySQL JOIN 语法说明与 INNER JOIN 语法用法实例.docx

    首先,MySQL 的 JOIN 语法用于根据两个或多个表中的字段之间的关系,从这些表中得到数据。JOIN 通常与 ON 关键字搭配使用,基本语法如下:`FROM table1 INNER|LEFT|RIGHT JOIN table2 ON condition`,其中 `table1` ...

    MySQL查询把多列返回结果集拼装成一个字段

    mysql中有种可以通过join相关操作进行表与表之间的方式查询不同结果集,但是在一对多的情况下,关键查询的结果是多条的.例如:班级和学习的关系,我想很直观的看到班级和学生的情况,列表显示出班级的信息和班级的男生...

    MySQL left join操作中on和where放置条件的区别介绍

    在SQL查询中,`LEFT JOIN` 是一种连接两个或多个表的方法,以便从左表(通常是主表)中返回所有行,即使在右表中没有匹配的行。在这个过程中,`ON` 和 `WHERE` 子句都是用来指定条件的,但它们在查询逻辑中的作用...

    MySQL联表查询基本操作之left-join常见的坑

    例如,如果`user`表中有两个相同`role_id`但不同`user_name`的记录,LEFT JOIN可能返回重复的角色信息。 在实际应用中,我们还应关注以下几点: 1. **避免全表扫描**:确保JOIN操作基于索引,这样可以提高查询速度...

    MySQL的LEFT JOIN表连接的进阶学习教程

    MySQL的LEFT JOIN是一种关联查询操作,它用于合并两个或多个表的数据,并且返回所有左表(也就是在JOIN语句中位于LEFT关键字之后的表)的记录,即使在右表中没有匹配的记录。这个概念是数据库关系查询中的关键部分,...

    关于sql的left join,right join,inner join,outerjoin

    INNER JOIN仅返回两个表中存在匹配的记录。如果在一个表中没有找到匹配的记录,那么这条记录就不会出现在结果集中。语法如下: ```sql SELECT column_name(s) FROM table1 INNER JOIN table2 ON table1.column = ...

    两个表中查询出不同的数据

    本话题聚焦于如何从两个表中查询出不同的数据,这是一个在数据对比、数据清洗和数据分析时经常遇到的问题。通过理解并掌握这个技能,可以有效地找出数据间的差异,从而提升数据处理的准确性和效率。 首先,我们要...

    超详细mysql left join,right join,inner join用法分析

    MySQL中的JOIN操作是数据库查询中非常重要的一个概念,主要用于在两个或多个表之间建立关联,以便从这些表中检索所需的数据。在这个超详细的分析中,我们将深入探讨LEFT JOIN、RIGHT JOIN以及INNER JOIN的用法。 1....

    mysql_adv_select.rar_any left join_union

    结合使用`LEFT JOIN`和`UNION ALL`,我们可以构造一个复杂的查询,首先使用`LEFT JOIN`从文章表中获取数据,并关联到分类表以获取对应的分类名称,然后通过`UNION ALL`将不同条件下的查询结果整合在一起。...

    MySQL在右表数据不唯一的情况下使用left join的方法

    MySQL中的LEFT JOIN是一种关联查询操作,它用于合并两个或更多表的数据,主要关注左表(第一个表)的所有记录,即使在右表(第二个表)中没有匹配的记录。LEFT JOIN的关键在于左表的所有记录都将被返回,而右表只...

    mysql子查询与连表查询的效率比较及优化

    **连表查询(Join Query)**:连表查询是指将两个或多个表的数据组合在一起进行查询的过程。MySQL支持多种类型的连表查询,包括内连接(INNER JOIN)、左连接(LEFT JOIN)、右连接(RIGHT JOIN)等。连表查询通常...

Global site tag (gtag.js) - Google Analytics