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


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

    例如:

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

    --建表table1,table2:   

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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语句  

    1
    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)那么获取差值

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

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

    1
    select userid from bbscs_role_user where roleid = 'sales'

     # ---> 11条记录

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

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

     # ---> 4条记录

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

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

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

    1
    2
    3
    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 查询两个表中不同的值(主要是差值)  这个语句查询还是存在问题。

    1
    2
    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条记录

    测试二:

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

    1
    2
    3
    select t4.userid fromselect 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

    https://www.zksfyz.com/detail/99/

  • 相关阅读:
    脚本——猜拳
    脚本——基础命令
    脚本——1-100奇数的和
    脚本——判断文件类型
    脚本——判断分数是否合格
    脚本——判断服务是否开启
    脚本——ping一个网址三次
    脚本——判断是否root用户
    脚本——查看目录是否存在
    第十八天:CSV、JSON、Excel、SQLite
  • 原文地址:https://www.cnblogs.com/zksfyz/p/7025841.html
Copyright © 2020-2023  润新知