加入从相同 table 创建的两个子查询
Joining two subqueries that were created from the same table
我有一个 table TABLE1 列:
key, person, date, type, trait1, trait2, trait3, trait4, trait 5
现在假设我从 TABLE1:
创建了两个临时 tables
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
如果我要像这样加入 table:
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 创建 TABLE 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
逻辑上这似乎会产生相同的结果,对吗?这个例子主要是为了说明我的问题:如果你把一个table过滤成两个subtable,每个subtable根据不同的条件过滤,然后像这样join,结果会不会和if一样您只是为这两个条件过滤了原始 table ?
如果 key
/person
唯一定义每一行,那么结果将非常非常接近。联接将合并符合第一个条件的行与自身,但前提是它符合第二个条件。
他们什么时候会不一样?那就是条件 A.key = B.key and A.person = B.person
无法获取匹配行的时候。当 key
或 person
为 NULL
.
时会发生这种情况
当然,如果 key
/person
做 而不是 唯一标识给定的行,那么这两种方法不同是微不足道的。
我有一个 table TABLE1 列:
key, person, date, type, trait1, trait2, trait3, trait4, trait 5
现在假设我从 TABLE1:
创建了两个临时 tablescreate 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
如果我要像这样加入 table:
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 创建 TABLE 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
逻辑上这似乎会产生相同的结果,对吗?这个例子主要是为了说明我的问题:如果你把一个table过滤成两个subtable,每个subtable根据不同的条件过滤,然后像这样join,结果会不会和if一样您只是为这两个条件过滤了原始 table ?
如果 key
/person
唯一定义每一行,那么结果将非常非常接近。联接将合并符合第一个条件的行与自身,但前提是它符合第二个条件。
他们什么时候会不一样?那就是条件 A.key = B.key and A.person = B.person
无法获取匹配行的时候。当 key
或 person
为 NULL
.
当然,如果 key
/person
做 而不是 唯一标识给定的行,那么这两种方法不同是微不足道的。