2012-08-16 75 views
1

我有如下表:选择具有不同的MySQL更新

ID, initials, surname, company, active 
1, p, abc, com1, 0 
2, p, abc, com1, 0 
3, c, acb, com1, 0 
4, c, def, com1, 0 
5, c, def, com1, 0 

现在我想的"缩写,姓,公司"重复组合更新到状态1,产生以下内容:

ID, initials, surname, company, active 
1, p, abc, com1, 0 
2, p, abc, com1, 1 
3, c, acb, com1, 0 
4, c, def, com1, 0 
5, c, def, com1, 1 

的选择工作:

SELECT DISTINCT initials, surname, company 
FROM table 

我三编这一点,但是,这不是'牛逼工作:

UPDATE table 
SET active = 1 
WHERE EXISTS(SELECT DISTINCT initials, surname, company) 
+0

欢迎StackOverflow上:如果您发布的代码,XML或数据样本,** **请在高亮文本编辑器的线和编辑器工具栏上单击“代码示例”按钮('{}')很好地格式和语法高亮显示! – 2012-08-16 11:23:46

回答

7
UPDATE table AS t 
    JOIN table AS tt 
    ON t.initials = tt.initials 
    AND t.surname = tt.surname 
    AND t.company = tt.company 
    AND t.id > tt.id 
SET t.active = 1; 

也就是说,对于每一行,如果存在具有较低ID另一行,用相同的缩写,姓和公司更新。

下面是它的一个sqlfiddle

+0

收到此错误#1093 - 您不能指定目标表“T”在FROM子句 – user1603035 2012-08-16 11:31:27

+0

哦,你正在使用MySQL的更新,我已经编辑我的答案。 – 2012-08-16 11:38:12

+0

感谢您的快速回复,但知道我得到以下错误:#1054 - 'where子句'中的未知列't.initials' – user1603035 2012-08-16 11:45:56