0

我有两个表,如果两者都有匹配的值,我需要比较它们。表结构

Persons
ID | fname | lname | address | socialNumber | taxNumber | Match

Personals
ID | fname | lname | address | socialNumber | taxNumber

我有两个正在检查匹配的参数,socialNumber 和/或 taxNumber。

  1. Person 需要与 Personals 进行比较
  2. 如果找到匹配,则使用 Personals 的 ID(匹配的 ID)更新 ID(以 Persons 为单位)并将“Match”设置为 True(默认为 false)
  3. 如果未找到匹配项,则从 Persons 中删除行并将其作为新行插入 Personals
  4. 项目清单

此外,如果我想添加新参数以查找匹配项(例如:地址),是否可以让所有内容尽可能动态化。这是我现在正在使用的 SQL 代码,但我不知道如何根据需要对其进行扩展。

 UPDATE Persons SET Match = 1, ID = (SELECT MAX(ID) FROM Personals) WHERE taxNumber IN ( SELECT taxNumber FROM Personals GROUP BY taxNumber HAVING ( COUNT(taxNumber) > 1 ))
4

1 回答 1

0

我不认为您可以在单个查询中轻松完成此操作,而不是不使用游标,但您可以将操作分为如下两部分:

--update action
update  a 
set a.id = b.id, a.match =1
from _persons a inner join _personals b 
on a.social = b.social or a.taxnumber = b.taxnumber

--delete / insert action
declare @RowCount as integer
select  @RowCount = count(a.id) from _persons a  
where ID not in (
        select a.id
        from _persons a inner join _personals b 
        on a.social = b.social or a.taxnumber = b.taxnumber
    )

if @RowCount>0 
begin
insert into _Personals (ID, fname, lname, address, social, taxnumber)
select ID, fname, lname, address, social, taxnumber from _persons a
where ID not in (
                select a.id
                from _persons a inner join _personals b 
                on a.social = b.social or a.taxnumber = b.taxnumber
            )
delete _persons
where ID not in 
    (
            select a.id
            from _persons a inner join _personals b 
            on a.social = b.social or a.taxnumber = b.taxnumber
    )
end 
于 2013-05-06T13:24:44.793 回答