OR子句的问题

时间:2013-12-12 21:49:13

标签: tsql

我在使用OR子句时遇到了一些麻烦。 我正在尝试连接两个大表,下面给出的是表中的示例数据

表1(t1)

      vendor        addr1           city         zip
       ADT      PO BOX 371956      PITSBURGH     15250

表2(t2)

      vendor    addr1       city             zip
      ADT   PO Box 371956   Pittsburgh      15250-7956

下面给出的前两个select语句显示两个表中的一行数据。 在第三个选择中,我有一个OR子句,这不显示任何行。 OR子句不应该影响结果集。

 select *
 from t1
 left join t2
 on t1.addr1 = t2.addr1


  select *
   from t1
  left join t2
  on t1.addr1 = t2.addr1
   and (t1.city = t2.city)

下面的选择不会显示任何数据。 WHY吗

 select *
  from t1
 left join t2
 on t1.addr1 = t2.addr1
 and ((t1.city = t2.city) or (t1.zip = t2.zip))

1 个答案:

答案 0 :(得分:2)

在您的上一次查询中:

t1.addr1 = t2.addr2 AND
(
    t1.city = t2.city OR
    t1.zip  = t2.zip
)

考虑您的样本数据:

t1."PO BOX 371956" = t2."PO Box 371956" AND -- TRUE
(
    t1."PITSBURGH" = t2."Pittsburgh" OR     -- FALSE
    t1."15250" = t2."15250-7956"            -- FALSE
)

你得到了:

= TRUE AND (FALSE OR FALSE)
= TRUE AND FALSE
= FALSE

所以,没有汤给你。

相关问题