2015-04-20 101 views
-2

我有兩張桌子。我的第一個table A包含如何從SQL Server中的不同值更新公共列值?

Tran_Particular | Dr_Tran_Amt | BeneficiaryName | PRNNo 

列。

我的第二個表B中

BeneficiaryName | Dr_Tran_Amt | PRNNo 

列。

我想更新表A.PRNNo但是當我在BeneficiaryNameDr_Tran_Amt上更新時,它只更新第一個值。但在table B有兩個PRNNO是存在的並且在table A也存在兩個不同的Tran_Particular。我想更新獨特的PRNNO和Tran_ParticularBeneficiaryNameDr_Tran_Amt

查詢

update A 
    set a.PRNNo = b.PRNNo 
from A a 
    inner join B b 
    on a.Dr_Tran_Amt= b.Amount 
    and a.BeneficiaryName = b.BeneficiaryName; 

要在SQL服務器中更新這個。

enter image description here

enter image description here

+0

兩行相同標識值?數據庫如何知道哪個值與哪一行一致?您應該使用主鍵(或至少一個唯一的鍵)加入。 A和B的主要關鍵是什麼? –

+0

是的,兩行具有相同的縮進值。問題是我沒有在我的數據庫中有任何主鍵或唯一鍵。我想在任何行的第一或第二位更新PRNNO。 – vijayk

回答

1

下面的代碼應該讓你僅第一個匹配行(最低PRNNo值):

UPDATE A 
    SET a.PRNNo = b.PRNNo 
FROM A a 
    INNER join B b 
    ON a.Dr_Tran_Amt = b.Amount 
    AND a.BeneficiaryName = b.BeneficiaryName 
    AND b.PRNNo = (SELECT MIN(c.PRNNo) FROM B c WHERE c.BeneficiaryName = B.BeneficiaryName AND c.Dr_Tran_Amt = b.Dr_Tran_Amt); 
+0

這隻會更新一個PRNNO,但如何更新剩餘的? – vijayk

+0

這將表A中的所有PRNNo值更新爲表B中的最小PRNNo值,其中表A中的Dr_Tran_Amt與表B中的金額相匹配,並且表A中的受益人名稱與表B的受益人名稱相匹配。在上面的示例表中,表A的第1行和第2行將PRNNo設置爲119699228。 – Russ

相關問題