我有两张桌子:
地点
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
地理位置表格错误地填充了重复的地理位置名称,但具有唯一的 LocationID 。我需要使用 LocationOwner 表加入位置表,以检查用户是否不是这两个位置的所有者。例如,丹佛的 LocationOwner 应与3 OR 4的 LocationID 绑定,但不能同时绑定。基本上我需要检查没有用户绑定到多个重复位置。我猜这是一个问题,但我没有取得多大进展。
答案 0 :(得分: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
答案 1 :(得分:0)
在LocationID上加入两个表,并查找与User和LocationName重复的行。
此处已有大量问题向您展示如何在多个列上查找重复项。
答案 2 :(得分: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
答案 3 :(得分:0)
你应该能够通过GROUP BY with HAVING找到欺骗..
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