澄清SQL语法

时间:2014-05-01 17:05:20

标签: sql sql-server sql-server-2008

澄清我的SQL语法

WHERE条件仅在INSURANCECODECASH时才查找''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)

3 个答案:

答案 0 :(得分:3)

OR具有优先权,这意味着您将有效地获得具有 两者的任何行,即

  1. 如果rpt.InsuranceCode的值为CASH或空字符串
  2. 如果Ip.PlanName为空
  3. 如果 两个条件都满足,您将在结果集中获得一行。

    您可以将查询视为以下内容:

    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