sql 查询逻辑A表有Bcde表没有就显示 A表有Bcde表有则
2023-11-19 本文已影响0人
吉凶以情迁
sql server数据库查询 , 假设 a b c d e f表都是左关联 ,
条件1:假如 只有a表存在name=a的记录且a表 flag=1我需要显示,
条件2:如果b -c -d -e表也存在name=a还需要遵守 b c d e 中还有另外一个status为2的状态条件
刚开始写的是inner join
这导致 条件1 无法满足,必须全匹配
写了left join B C D E 这导致 on里面写的status=2的逻辑无效,不为2的记录也显示出来了
原因或许
因为是B LEFT C C 又LEFT D ,D 又LEFT E
c表 on d时 c 记录存在,但是 不符d.status的,但是依然会显示。
最后解决办法:
解决办法1: 子查询把a b c d e 单独写一个inner join查询 然后再 left 他们
解决办法2: 全部left join 他们
但是where d.status=2 or d.status is null
格式化显示
(case isnull(Status,99) when 99 then '仅仅a表存在 else 'A' end) as X