我在使用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))
答案 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
所以,没有汤给你。