2011-03-28 35 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

相关问题