2013-05-06 36 views
0

我有兩個表,我需要比較是否有值在兩個匹配。表比較兩個表用於匹配和更新或移動和刪除行

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

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

的 結構我有一個正在檢查匹配,socialNumber AND/OR taxNumber兩個參數。

  1. 人需要用交友相提並論
  2. 如果發現匹配更新ID(人口)與交友(即相匹配的一個)的ID和「匹配」設置爲True(默認爲false)
  3. 如果匹配不是從人發現刪除行和交友將它插入新行
  4. 列表項

另外,如果有可能擁有的一切動態的可能的,如果我想添加新的參數尋找matchin g(例如:地址)。 這是我現在正在使用它的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)) 

回答

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