2014-04-30 20 views
0

在sql服務器基本上我有一個查詢來查找重複表中的一個表。我想下過濾此列表所有出現在一個表,並在第二個表不包含sql顯示重複行丟失從另一個表

得到重複的重複:

select [OBId], COUNT(*) AS dupes 
FROM   [Broker] b 
    GROUP BY [OBId] 
    HAVING  (COUNT(*) > 1) 

經紀人ID,OBID

和我想所有沒有brokerid此表 第二個表 test

我試圖做一個子查詢的重複,但我無法弄清楚

+1

這是http://stackoverflow.com/questions/19538507/delete-duplicate-records-that-do-not-exist的非常近的副本 - 在其他表 - 我的猜測是,如果你讀了第二個答案,你會得到你需要讓你移動。 – mwigdahl

回答

0

如果你只是使用子查詢,並說這

select [OBId], 
COUNT(*) AS dupes 
FROM [Broker] b 
WHERE [OBId] NOT IN (select other_table_id from other_table) 
GROUP BY [OBId] 
HAVING  (COUNT(*) > 1) 
0

你可以用不做它存在於一個子查詢:

SELECT sub.* 
FROM 
    (SELECT [OBId] 
     , COUNT(*) AS dupes 
    FROM [Broker] b 
    GROUP BY [OBId] 
    HAVING COUNT(*) > 1) sub 
WHERE NOT EXISTS 
    (SELECT 1 
    FROM SomeSecondTable sst 
    WHERE sub.OBId = BrokerId); 

如果你試圖返回的全套從重複的經紀表中的記錄,並要取消記錄,唐「T在第二個表中,那麼你可以使用此代碼:

SELECT sub.* 
FROM [Broker] b 
WHERE EXISTS 
    (SELECT [OBId] 
     , COUNT(*) AS dupes 
    FROM [Broker] sb 
    WHERE b.OBId = sb.OBId 
    GROUP BY [OBId] 
    HAVING COUNT(*) > 1) 
AND NOT EXISTS 
    (SELECT 1 
    FROM SomeSecondTable sst 
    WHERE b.OBId = BrokerId); 
0

你可以使用一個EXCEPT條款:

select [OBId] 
FROM  [Broker] b 
    GROUP BY [OBId] 
    HAVING (COUNT(*) > 1) 

EXCEPT 

select [OBId] 
FROM  [SecondTable] T2 
相關問題