澄清我的SQL语法
WHERE
条件仅在INSURANCECODE
或CASH
时才查找''
和PLANNAME = NULL
?
select *
from report rpt
left join InsurancePlan Ip on IP.PlanName = rpt.PrimaryPlanName
where
(rpt.InsuranceCode in ('CASH', '') or Ip.PlanName is null)
答案 0 :(得分:3)
OR
具有优先权,这意味着您将有效地获得具有 或两者的任何行,即
rpt.InsuranceCode
的值为CASH
或空字符串Ip.PlanName
为空如果 或两个条件都满足,您将在结果集中获得一行。
您可以将查询视为以下内容:
WHERE
rpt.InsuranceCode = 'CASH'
OR rpt.InsuranceCode = ''
OR Ip.PlanName IS NULL
在下面的示例表中,结果集中最后的行标有右侧的*:
InsuranceCode PlanName ResultSet Why?
'CASH' 'Whatever' * rpt.InsuranceCode = 'CASH'
'' 'Whatever' * rpt.InsuranceCode = ''
'Whatever' NULL * Ip.PlanName IS NULL
'CASH' NULL * Both
'' NULL * Both
'Whatever' 'Whatever' Neither
答案 1 :(得分:0)
基本上,您的查询将返回InsuranceCode等于' CASH'或''以及PlanName
的NULL值的行答案 2 :(得分:-1)
你现在的方式就是获得insuranceCode = cash AND insuranceCode =''或者planName为null。因此,无论insCode如何,所有planeName = null都将显示,而planName将具有''或现金。 如果您希望所有行都具有null planName,请将OR更改为AND