检查两个表中的两个值是否有重复项

时间:2016-05-02 21:42:05

标签: tsql duplicates

我有一个现有的检查,它查看Name表以检查重复的名称(Full_Name),但是如何检查名称和地址? Full_Address存在于地址表中,当我尝试将这两个值组合起来检查数据库作为单个值时,一切都会中断。

Select Name.ID, Name.Full_Name, Concat(Name.Full_Name,' ', Address.FULL_ADDRESS) as Comb 
FROM Name INNER JOIN Address ON Name.ID = Address.ID
Where Full_Name != '' AND having count(Comb)>1
group by Full_Name

1 个答案:

答案 0 :(得分:1)

DECLARE @Name TABLE (ID INT, Full_Name NVARCHAR(50))
DECLARE @Address TABLE (ID INT, FULL_ADDRESS NVARCHAR(100))

INSERT INTO @Name VALUES
     (1,'Alex Zoolittle')
    ,(2,'Brian Yakami')
    ,(3,'Charles Xylogon')
    ,(4,'Brian Yakami')

INSERT INTO @Address VALUES
     (1,'123 Westwood Way, Los Angeles, CA 95043')
    ,(2,'234 Eastwood Lane, Los Gatos, CA 95030')
    ,(3,'345 Northwood Blvd, Los Alamos, NM 83241')
    ,(4,'234 Eastwood Lane, Los Gatos, CA 95030')

;WITH Comb
    AS (
        SELECT na.ID, na.Full_Name, CONCAT(na.Full_Name,' ', ad.FULL_ADDRESS) AS Comb,
            ROW_NUMBER() OVER(PARTITION BY CONCAT(na.Full_Name,' ', ad.FULL_ADDRESS) ORDER BY na.ID) AS Row
            FROM @Name na
                INNER JOIN @Address ad
                    ON na.ID = ad.ID
        WHERE Full_Name != ''
        )

SELECT ID, Full_Name, Comb FROM Comb
    WHERE Row = 1