2016-04-11 98 views
0

我有兩個表:T-SQL查詢來檢查重複

位置

LocationID LocationName 
========================= 
1   Boston 
2   Milwaukee 
3   Denver 
4   Denver 
5   Cleveland 
6   Cleveland 

LocationOwner

LocationID AppSecurityUserID 
================================================ 
1   A713E156-FEAB-474C-A078-04C8022A387C 
2   AF6EEFCE-7F5D-4B3C-BE3D-085A4C85832E 
3   9964FAF7-8A2E-4BFE-9FE2-0B47E585FB9C 
3   6F410CB4-312C-440A-8669-2106C49517F1 
3   EC8CAD4A-4FB2-4BE1-97AC-28C8CF68CCE0 
5   7B55B6A2-F94D-4608-938A-4206FE1DAF6D 

位置表已被錯誤地填入重複的地點名稱,但具有獨特的位置ID。我需要加入地點LocationOwner表以檢查用戶是否不是這兩個地點的所有者。例如,Denver的LocationOwner應綁定到LocationID of 3 4,但不是兩者。基本上我需要檢查沒有用戶綁定到多個重複的位置。我猜這有一個疑問,但我沒有取得很大的進展。

回答

0

你只需要第一個表來檢查重複

WITH CTE as 
(SELECT *, 
ROW_NUMBER() OVER(PARTITION BY LocationName ORDER BY LocationID) as rn 
FROM Locations) 
SELECT LocationID,LocationName FROM CTE WHERE rn=1 
0

加入對LocationID兩個表,並查找複製User和LOCATIONNAME行。

這裏已經有很多問題了,這些問題向您展示瞭如何在多列上找到重複項。

0

我想已經有一個關鍵的預防由LocationID重複...

select * from (
    select 
     o.AppSecurityUserID, 
     l.LocationName, 
     l.LocationID, 
     LocationDupedCount = count(*) over(partition by o.AppSecurityUserID, l.LocationName) 
    from 
     LocationOwner o 
     inner join Location l on l.LocationID = o.LocationId 
) t 
where 
    t.LocationDupedCount > 1 
0

您應該能夠通過使用GROUP BY與具有尋找受騙者..

SELECT lo.AppSecurityUserID, 
     l.LocationName 
FROM LocationOwner lo 
     JOIN Locations l ON lo.LocationID = l.LocationID 
GROUP BY lo.AppSecurityUserID, 
     l.LocationName 
HAVING COUNT(LocationName) > 1