2010-07-01 26 views
5

Tôi có 2 bảng:
T1(IDa,IDb): có số liệu như thế nàyLàm sao để câu sql này

 
    IDa IDb 
    1 2 
    3 4 
    5 6 
    7 8 

T2(IDc,IDd): với dữ liệu như thế này

 
    IDc IDd 
    1 2 
    4 5 
    3 6 
    7 8 

và Identity cho mỗi bảng là cặp ID:

  • T1, danh tính là IDA và IDb
  • T2 là IDC và IDD

Câu hỏi đặt ra là: Làm thế nào để lấy lại "Không phù hợp" Hồ sơ từ hai bảng ??? Trong trường hợp này,

  • sự phù hợp là 1,2 và 7,8
  • "không phù hợp" là: 3,4 $ 5,6 $ 4,5 $ 3,6

Tôi có thể làm điều đó bằng cách sử dụng chuỗi và nối. Có ai có phương pháp sử dụng tham gia bên trong hay phương pháp nào khác không ??

Trả lời

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

tốt nỗ lực, cảm ơn bạn – RMohammed

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 

Sửa Tất nhiên nếu $, không cần chỉ cần sử dụng

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 

Hoặc một cách khác, chỉ cần cho đá (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

Vâng, tham gia đầy đủ bên ngoài là tên của trò chơi của bạn – Thomas

+0

có, nó giúp tôi, cảm ơn bạn – RMohammed

Các vấn đề liên quan