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

上一篇下一篇

猜你喜欢

热点阅读