2011-03-28 24 views
7

這對我的SQL-foo來說有點太棘手。如果一行已經存在相同的值,則增加一列

我需要做的是插入一個新行(其中包含3列),除非行已經存在,其中兩個值是相同的,如果它確實存在,我需要增加第三個值在那一行上。假設兩個值是關係(a,b),第三個值是關係的強度(隨着關係的每次發生都會增加)。

在此先感謝!

+0

我們可以假設(A,B)是唯一的這個表?特別是,我們可以在其上添加一個獨特的索引嗎? – tloach 2011-03-28 15:21:36

+0

@tloach是的,(a,b)對於這個表總是唯一的,值B是唯一的(關係的第二個成員),值A可以出現多次。 – Filipe 2011-03-28 15:27:40

回答

12
INSERT 
INTO a_b (a, b, strength) 
VALUES ($a, $b, 1) 
ON DUPLICATE KEY 
UPDATE strength = strength + 1 

請確保您有一個UNIQUE (a, b)PRIMARY KEY (a, b)約束在桌子上

+0

這適用於單個值,但如果我想檢查一行是否已經存在相同的兩個值,該怎麼辦? – Filipe 2011-03-28 15:26:37

+0

@Filipe:如果你在表中有'(1,1)',插入'(2,1)'或者'(1,2)'將被插入,但是插入'(1,1)'會被更新。這不是你想要的嗎? – Quassnoi 2011-03-28 15:31:01

相關問題