2013-01-05 234 views
3

我有兩個表。這些數據是類似下面:需要幫助T sql查詢

表1:

Col1  Col2 
---------------- 
A   A1 
A   A2 
A   A3 
B   B1 
B   B2 
B   B3 

表2:

Col1  Col2 
------------------ 
A   A1 
A   A4 
A   A5 
B   B1 
B   B4 
B   B5 

我需要帶出數據col2的兩個表的基礎上的差異Col1中的值。輸出應該類似於下面:

輸出:

Col MismatchValuesInTable1  Mismatchvaluesintable2 
--------------------------------------------------------- 
A    A2      A4 
       A3      A5 
B    B2      B4 
       B3      B5 

請幫我查詢來實現上述。

回答

5
select isnull(t1.Col1,t2.Col2) as Col, 
    t1.Col2 as MismatchValuesInTable1, 
    t2.Col2 as MismatchValuesInTable2 

from t1 
FULL JOIN t2 on (t1.Col1=T2.Col1) and (t1.Col2=t2.Col2) 
where t1.Col2 is null or t2.Col2 is null 
order by Col 

SQLFiddle demo

0

這將產生你的輸出表。不確定這個位置是否在你的問題中很重要?如果是這樣,則基於以下事實匹配:表T1中的A的第二個值與表T2中的A的第二個值不匹配。

create table T1 
(col1 varchar(10), 
col2 varchar(10)) 

create table T2 
(col1 varchar(10), 
col2 varchar(10)) 


insert into T1 
select 'A','A1' 
union all 
select 'A','A2' 
union all 
select 'A','A3' 
union all 
select 'B','B1' 
union all 
select 'B','B2' 
union all 
select 'B','B3' 

insert into T2 
select 'A','A1' 
union all 
select 'A','A4' 
union all 
select 'A','A5' 
union all 
select 'B','B1' 
union all 
select 'B','B4' 
union all 
select 'B','B5' 

select T1.col1, T1.col2, T2.col2 
from (select row_number() over(partition by Col1 order by Col1, Col2) as row_number, 
* from T1) as T1 
inner join 
(select row_number() over(partition by Col1 order by Col1, Col2) as row_number, 
* from B) as T2 
on T1.col1 = T2.col1 
and T1.row_number = T2.row_number 
where T1.col2 <> T2.col2