zoukankan      html  css  js  c++  java
  • 数据库使用逻辑删除时在新增查询时遇到的问题

      昨天在工作的时候遇到如下的情况

      现在有2张表

    user doctor_team_member

    id

    id

    name

    team_id

    hospital_id

    hospital_id

    delete_flg

    delete_flg
      doctor_id

      user表存的是所有的医生用户,doctor_team_member 存的是 所有医院里面已经编入了团队的医生。现在需要查询出某个医院下面所有没有加入任何团队的医生。

      1.0 版本 是这样的:

    SELECT
        *
    FROM
        user u
    LEFT JOIN doctor_team_members dtm ON u.id = dtm.doctor_id
    WHERE
      dtm.team_id IS NULL
    AND 
      u.hospital_id = 73603893786841088;

      这就是忽略了delete_flg=1 被逻辑删除的用户 。当有个用户被逻辑删除的时候,但在筛选的时候,筛选不出被逻辑删除的用户。因为被逻辑删除的用户在 doctor_team_members 表中是有数据的可以和user.id 关联上。

      然后就是2.0版本:

    SELECT
        *
    FROM
      user u
    LEFT JOIN  
      doctor_team_members dtm ON u.id = dtm.doctor_id WHERE   (dtm.team_id IS NULL OR dtm.delete_flg ='1') AND   u.hospital_id = 73603893786841088;

      这样就可以把被逻辑删除的用户再筛选出来。 但现在又出现了新的问题,假如我们新增一个 doctor_team_members数据后。再把他逻辑删除掉,然后我们再新增同一个医生加入 doctor_team_members 。现在数据库里面,有一个逻辑删除的医生和一个同名同id 的新加的医生。这个时候问题就出现了,我们再次查询的时候,那个医生就会出现在该医院下未加入任何团队的名单里面。当我们再逻辑删除他的时候再查询,还有出现多个同名医生的情况。那些多出来的医生就是 delete_flg='1'医生且同一个的医生。

      然后就是最终解决方案。完全排除  delete_flg='1' 的医生

    SELECT
        *
    FROM
        action_user u
    LEFT JOIN 
      doctor_team_members dtm ON u.id = dtm.doctor_id AND dtm.delete_flg ='0' WHERE   dtm.team_id IS NULL
    AND  u.delete_flg = '0'
    AND 
      u.hospital_id = 73603893786841088;

      在关联表的时候就把 delete_flg ='1' 的数据去掉,然后再执行 where 的条件进行筛选。这样就不用受 delete_flg='1'的影响了。

      总结:

    • 在有逻辑删除的表里面,增删改查的时候,首先把 逻辑删除的 字段 排除掉,然后再做操作。有join 的

    就放在 on 的条件里面,先on 再 where  。 (忽视了on 和 where 的执行顺序让我脑壳疼了很久)

      

     

  • 相关阅读:
    Python基础 | pandas中dataframe的整合与形变(merge & reshape)
    Python基础 | pandas中数据的筛选(index & subset)
    Python基础 | 关于“循环”那些事
    Python基础 | 数据文件的读写
    Python基础 | 字符串操作
    如何用数据说谎 How to lie with data
    浅谈“数据敏感度”
    爬虫 | IT桔子互联网公司死亡名单
    从一道面试题谈数据推算方法
    爬虫 | cnblog文章收藏排行榜(“热门文摘”)
  • 原文地址:https://www.cnblogs.com/luffyxin/p/10081844.html
Copyright © 2011-2022 走看看