2013-12-23 33 views
-2

我有兩個表:INNER JOIN則完全匹配的記錄中加入

declare @Table1 as table (id int, value CHAR(1)) 
declare @Table2 as table (id int, value CHAR(1)) 

INSERT @Table1 
VALUES (1, 'A'), 
(1, 'B'), 
(3, 'A') 

INSERT @Table2 
VALUES(1, 'A'), 
(1, 'C'), 
(2, 'A') 

我想加入這兩個表,以便在年底我應該能夠產生這樣的結果:

id  value id  value 
1  A  1  A 
1  B  NULL NULL 
NULL NULL  1  C 

對於不充分的解釋(我的意思是沒有任何解釋),我很抱歉。我想在這裏做的是(類似的)爲id列進行內部連接(我的意思是將兩個集合上的「id」列上的記錄集合在一起),然後查看值列並在這個共同集合的邊界。

我希望我能描述我想要做的事情。

+3

你想做什麼? '@ Table1'的('3','A')值到哪去(或者爲什麼不顯示?)。或者還有另外一種方法:**爲什麼**你正在顯示'@ Table1'中的'(1,'B')',它不存在於@ @ Table2中,但是'(3,'A')'isn沒有被展示....並沒有真正意義。 ..... –

+0

他想做一個並排比較。那是我能夠忍受的。 1 A在兩張桌子中並排顯示; 1 B只在@ table1但不在桌面2 ......我認爲他錯過了表1的3 A –

+0

對於不充分的解釋(我的意思是沒有任何解釋),我很抱歉。 – fkucuk

回答

0

我贏了什麼?

select a.id as a_id, a.value as a_value, 
     b.id as b_id, b.value as b_value 
from (select * 
     from tablea a 
     where a.id = 1 
    ) a full outer join 
    (select * 
     from tableb b 
     where b.id = 1 
    ) b 
    on a.id = b.id and a.value = b.value; 
+0

sorrry,但它不工作 - > http://sqlfiddle.com/#!3/e8ff1/7 –

+0

在SSMS中正常工作。我注意到預覽窗格只顯示2列 –

+0

看來你的工具無法呈現相同名稱的結果列 - 嘗試使用別名 –

0

您可以用full outer join通過預過濾表做到這一點在內部集合的值列上加入內部集合(id列上的內部連接)。

+0

這隻適用於記錄ID = 1,但不是兩個表共有記錄的規則,不是? –

2

希望這將工作

SELECT distinct t1_id as id, t1_value as value , t2_id as id , t2_value as value 
FROM (SELECT t1.id as t1_id, t1.value as t1_value from @Table1 t1 INNER JOIN @Table2 t2 on t1.id = t2.id) as A 
     FULL OUTER JOIN 
    (SELECT t2.id as t2_id, t2.value as t2_value from @Table1 t1 INNER JOIN @Table2 t2 on t1.id = t2.id) as B 
    on A.t1_value = B.t2_value 
ORDER BY t1_id desc 

基本上,我做的是外:

SELECT c.id,c.value,d.id,d.value 

FROM 
    @Table1 c 
    full join 
    @Table2 d 
     on c.id = d.id and c.value = d.value 
WHERE exists 
     (
     SELECT a.id 
      FROM 
       @Table1 a 
      INNER JOIN 
       @Table2 b 
        ON a.id = b.id and a.id = c.id or d.id = a.id 

     )