---表T,有字段A\B\C\D\E\F.....等,均为int类型,每记录这几列值都可以=1或0(或其他值)
--'执行A子查询','执行B子查询',实际为子查询对应不同表字段,不是固定
SELECT CASE WHEN A=1 THEN '执行A子查询' ELSE (CASE WHEN B=1 THEN '执行B子查询' ELSE (CASE WHEN C=1 THEN '执行C子查询' ELSE ('此处应为继续判断D=1...等,略')
END)
END)
END AS c
from t
--请问是否可以简化查询为以下语句,是否有漏洞,当A=1时只要A了查询的结果,即使同记录的B=1也不执行B子查询。。
--这样少了很多嵌套,比较简练
SELECT CASE WHEN A=1 THEN '执行A子查询' WHEN B=1 THEN '执行B子查询'when C=1 THEN '执行C子查询' ELSE ('此处应为继续判断D=1...等,略')
END AS c
from t
当满足A=1时,执行A子查询,不会再管B、C…是否为1
当不满足A=1而满足B=1时,执行B子查询,不会再管C、D…是否为1
......
select a.* ,a.name ,b.name ,b.name
from Temp t
left join ta a on t.A=1 and t.typeID=a.ID
left join tb b on t.B=1 and t.typeID=b.ID
left join tc c on t.C=1 and t.typeID=c.ID
多个when是并列的。 判断完一个when后,会继续判断另一个when
个人看法:
flag=rtrim(ltrim(STR(A)))+rtrim(ltrim(STR(B)))......charindex('1',flag)可以得到flag第几位为1,即需要执行第几个子查询判断比较少
to shaniu19:您的方法不对啊
to shaniu19:您的方法不对啊那可以用你的简化