簡體   English   中英

合並多個匹配條件

[英]Merge with multiple matching conditions

我必須編寫一個t-sql merge語句,其中必須滿足多個條件才能進行匹配。

表格欄名稱:ID,電子郵件地址,名字,姓氏,標題,移動電話,身份證,帳號,地址,郵政編碼

這里的主要問題是,我正在使用的數據庫沒有必填字段,沒有要比較的主鍵,並且源表也可以具有重復記錄。 結果,有許多組合可以檢查源表是否與目標表重復。 我的經理提出了以下方案

  1. 我們可能有兩個人使用相同電子郵件地址的數據,因此,電子郵件地址,名字和姓氏匹配為100%匹配(認為其他所有列均為空)

  2. mobile和accountnumber匹配為100%匹配的數據(認為其他所有列均為空)

  3. 標題,姓氏,郵政編碼,Dob匹配為100%匹配(認為其他所有列均為空)

在執行此任務時,我無法查看數據,因為我是一名新員工,而我的員工暫時不希望我看到此數據。 所以,我有點想像力。

解決方案現在,我正在考慮,而不是對照目標數據庫檢查源的現有記錄,而是使用存儲過程語句來清理源數據,如果滿足一個重復條件,它將跳過下一個重復的刪除語句並插入數據進入目標表。

with cte_duplicate1 AS
    (
        select emailaddress, sname, ROW_NUMBER() over(partition by emailaddress, sname order by emailaddress) as dup1
        from DuplicateRecordTable1
    )
    delete from cte_duplicate1
    where dup1>1;

(如果執行了第一個cte_duplicate1代碼,則它將跳過cte_duplicate2)

with cte_duplicate2 AS
    (
        select emailaddress, fname, ROW_NUMBER() over(partition by emailaddress, fname order by emailaddress) as dup2
        from DuplicateRecordTable1
    )
delete from cte_duplicate2
where dup2>1;

目前,這是一個模糊的計划。 我不知道,是否可以實現。

我做了一份無法查看數據的工作,因為我是新入職員工,而我的員工不希望我提供與我合作的數據。 所以,我有點想像力。

無論如何,這里的主要問題是,我正在使用的數據庫沒有必填字段,沒有要比較的主鍵,並且源表也可以有重復記錄。 結果,有許多組合可以檢查源表是否與目標表重復。

解決方案現在,我正在考慮,而不是對照目標數據庫檢查源的現有記錄,而是使用存儲過程語句來清理源數據,如果滿足一個重復條件,它將跳過下一個重復的刪除語句並插入數據進入目標表。

with cte_duplicate1 AS
    (
        select emailaddress, sname, ROW_NUMBER() over(partition by emailaddress, sname order by emailaddress) as dup1
        from DuplicateRecordTable1
    )
    delete from cte_duplicate1
    where dup1>1;

(如果執行了第一個cte_duplicate1代碼,則它將跳過cte_duplicate2)

with cte_duplicate2 AS
    (
        select emailaddress, fname, ROW_NUMBER() over(partition by emailaddress, fname order by emailaddress) as dup2
        from DuplicateRecordTable1
    )
delete from cte_duplicate2
where dup2>1;

目前,這是一個模糊的計划。 我不知道,是否可以實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM