更新所有重复行的值

时间:2015-07-29 01:21:03

标签: sql duplicates

我有4列

FirstName | LastName | Address | Vote

有几行具有相同的名字,姓氏和地址,并且对第一个重复行的投票为1

例如:

FirstName | LastName | Address     | Vote
John      | Doe      | 10 drive st | 1
John      | Doe      | 10 drive st | 0
Bob       | Smith    | 15 lexar dr | 0
Bob       | Smith    | 15 lexar dr | 0

如果第一个实例是1,我希望能够更新重复的投票值。从示例中,我希望John的重复投票也更新为1。

我迄今为止尝试的查询是:SELECT FirstName, LastName, Address, COUNT(*) FROM table GROUP BY FirstName, LastName, ADDRESS HAVING Count(*) > 1 WHERE Vote = 1

如何合并UPDATE查询,以便在第一个实例为Vote = 1时仅更新重复的投票列

由于

1 个答案:

答案 0 :(得分:0)

没有“第一个例子”这样的东西。 SQL表表示无序集,因此如果没有指定排序的列,则“first”没有意义。

也就是说,您可以通过执行以下操作将给定名称/地址组合的非1值设置为1:

update table t
     set vote = 1
     where vote <> 1 and
           exists (select 1
                   from table t2
                   where t2.firstname = t.firstname and
                         t2.lastname = t.lastname and
                         t2.address = t.address and
                         t2.vote = 1
                  );

这是ANSI标准语法,应该适用于大多数数据库。