我有一个带有列的表TABLE1:
key, person, date, type, trait1, trait2, trait3, trait4, trait 5
现在说我从TABLE1创建了两个临时表:
create temp1 as
select key, person, date, trait1, trait2
from TABLE1
where trait1=trait2
create temp2 as
select key, person, type, trait3, trait4
from TABLE1
where type='A' and trait3=trait4
如果我要加入这样的表:
create table TABLE2 as
select A.key, A.person, A.date, B.type, A.trait1, A.trait2, B.trait3, B.trait4
from temp1 A, temp2 B
where A.key = B.key and A.person=B.person
我是否会得到与原始TABLE1中创建表2的结果相同的结果:
create table TABLE2 as
select key, person, date, type, trait1, trait2, trait3, trait4
from TABLE 1
where trait1=trait2 and type='A' and trait3=trait4
从逻辑上讲,这似乎会产生相同的结果,对吗?这个例子主要是为了说明我的问题:如果你根据每个子表的不同条件将一个表过滤成两个子表,然后像这样加入它们,那么结果是否与你为这两个条件简单地过滤原始表一样?
答案 0 :(得分:1)
如果key
/ person
唯一地定义了每一行,那么结果将非常非常接近。连接将组合与第一个条件匹配的行与其自身,但仅当它与第二个条件匹配时才会结合。
他们什么时候会有所不同?那就是当条件A.key = B.key and A.person = B.person
无法获得匹配的行时。如果key
或person
为NULL
,则会发生这种情况。
当然,如果key
/ person
不唯一地标识给定行,那么这两种方法的不同是微不足道的。