2010-07-01 39 views
5

我有2個表:
T1(IDa,IDb):有這樣如何讓這條SQL語句

 
    IDa IDb 
    1 2 
    3 4 
    5 6 
    7 8 

T2(IDc,IDd)數據:像這樣

 
    IDc IDd 
    1 2 
    4 5 
    3 6 
    7 8 

,併爲每個表的身份數據這一對ID:

  • T1,身份是IDA和IDB
  • T2是IDC和IDD

的問題是:如何從兩個表的「不匹配」的記錄??? 在這種情況下,

  • 匹配是1,2-和7,8
  • 的 「不匹配」 是:3,4- $ $ 5,6 4,5 3,6 $

我可以做到這一點使用字符串和串聯。 有沒有人有使用內部連接或任何其他方法?

回答

3
select IDa, IDb from T1 
where not exists (select 1 from T2 where T2.IDc = T1.IDa and T2.IDd = T1.IDb) 
union all 
select IDc, IDd from T2 
where not exists (select 1 from T1 where T2.IDc = T1.IDa and T2.IDd = T1.IDb) 

+0

好努力,謝謝 – RMohammed 2010-07-01 09:08:58

5
DECLARE @Result nvarchar(max) 


SELECT @Result = ISNULL(@Result + '$','') + 
     CAST(ISNULL(IDa,IDc) AS VARCHAR(5)) + ',' + 
      CAST(ISNULL(IDb,IDd) AS VARCHAR(5)) 
FROM T1 FULL OUTER JOIN T2 
ON T1.IDa = T2.IDc AND T1.IDb = T2.IDd 
WHERE T1.IDa IS NULL OR T2.IDc IS NULL 

編輯當然如果$,不需要只是使用

SELECT ISNULL(IDa,IDc), ISNULL(IDb,IDd) 
FROM T1 FULL OUTER JOIN T2 
ON T1.IDa = T2.IDc AND T1.IDb = T2.IDd 
WHERE T1.IDa IS NULL OR T2.IDc IS NULL 

或者另一種方式,只是踢(MS SQL Server的2005+)

SELECT IDa, IDb from T1 
EXCEPT 
SELECT IDc, IDd from T2 
UNION ALL 
(
SELECT IDc, IDd from T2 
EXCEPT 
SELECT IDa, IDb from T1 
) 
+0

是的,全外連接是你遊戲的名字 – Thomas 2010-07-01 08:53:59

+0

是的,它幫助我,謝謝你 – RMohammed 2010-07-01 09:08:42