Tsql 与OR子句有关的问题

Tsql 与OR子句有关的问题,tsql,Tsql,我在OR条款上遇到了一些问题。 我正在尝试连接两个大表,下面给出了表中的示例数据 表1(t1) vendor addr1 city zip ADT PO BOX 371956 PITSBURGH 15250 表2(t2) 下面给出的前两个select语句显示两个表中的一行数据。 在第三个select中,我有一个OR子句,它不显示任何行。 OR子句不应影响结果集 select * from

我在OR条款上遇到了一些问题。 我正在尝试连接两个大表,下面给出了表中的示例数据

表1(t1)

      vendor        addr1           city         zip
       ADT      PO BOX 371956      PITSBURGH     15250
表2(t2)

下面给出的前两个select语句显示两个表中的一行数据。 在第三个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)
下面的选择不显示任何数据。为什么?

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

在上次查询中,您有:

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

所以,你没有汤。

我注意到的第一件事是,你的or语句是比较拉链和城市,而你之前的语句是比较城市和地址。表中的邮政编码看起来不一样(表一没有连字符部分),城市也不一样(Pit和Pitt的拼写)。如果这是实际数据,那是因为数据不匹配。但它是一个OR子句,而且由于城市匹配,zip是否匹配无关紧要,但是OP query THOW也不应该返回行。
= TRUE AND (FALSE OR FALSE)
= TRUE AND FALSE
= FALSE