【问题标题】:select to update with distinct mysql选择使用不同的 mysql 进行更新
【发布时间】:2012-08-16 19:56:51
【问题描述】:

我有下表:

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)

【问题讨论】:

  • 欢迎使用 StackOverflow:如果您发布代码、XML 或数据示例,在文本编辑器中突出显示这些行并单击“代码示例”按钮 ({ } ) 在编辑器工具栏上以很好地格式化和语法突出显示它!

标签: mysql sql


【解决方案1】:
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

【讨论】:

  • 收到此错误 #1093 - 您无法在 FROM 子句中指定目标表 't' 进行更新
  • 感谢您的快速回复,但知道我收到以下错误:#1054 - 'where 子句'中的未知列 't.initials'
  • 在没有主键列的情况下有什么办法吗?
猜你喜欢
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 2019-01-11
  • 2011-10-11
  • 1970-01-01
  • 2021-03-03
  • 2015-03-01
  • 1970-01-01
相关资源
最近更新 更多