2012-08-16 62 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