2014-03-24 57 views
-1

我經常使用PostgreSQL,並且我觀察到某些等式連接會將參與等式比較的兩列合併到結果集中的一列中,有些則不會。這似乎與連接是否爲INNER或OUTER有關,也與連接條件是否使用USING語法或ON語法表示有關。我想知道什麼時候這兩列被摺疊/合併爲一個,甚至更好:我想知道這個行爲在哪裏指定。什麼時候SQL連接的結果會將兩列合併爲一個?

+0

請您提供SQL語句嗎? – sarin

+0

這個問題很好,但它*需要一個代碼示例。請更新。 –

+0

@ErwinBrandstetter,由於以下兩個原因,不添加代碼示例:1)通過下面的答案可以證明這很容易理解,並且2)下面提供了一個很好的示例。我仍然想知道在哪裏,除了postgresql文檔以外,它指定USING子句具有這種行爲。 – BlueBomber

回答

2

using使用

create table a (id int); 
create table b (id int); 

select * 
from 
    a 
    inner join 
    b using (id); 
id 
---- 
(0 rows) 

如果on使用它會返回兩列將崩潰:

select * 
from 
    a 
    inner join 
    b on a.id = b.id; 
id | id 
----+---- 
(0 rows) 

而且沒有一個表名資格列是曖昧

select id 
from 
    a 
    inner join 
    b on a.id = b.id; 
ERROR: column reference "id" is ambiguous 
LINE 1: select id from a inner join b on a.id = b.id; 

outer join

select * 
from 
    a 
    full outer join 
    b on a.id = b.id; 
id | id 
----+---- 
(0 rows) 
+1

可能值得一提的是,即使在使用默認輸出合併列的單個實例的USING子句進行連接時,表限定引用總是有效。 –

+1

@Erwin好,我不知道這件事。 –

+0

這是在SQL標準中的某處指定的嗎? – BlueBomber

相關問題