在一行中具有相同值的其他行中满足条件时更新行

时间:2015-05-16 09:11:53

标签: mysql sql select

我需要找到包含“未分类”的所有行,其中“type”设置为“status”。如果另一行具有相同的“id”,但包含“type”的“end”和“data”的“legacy”,我需要为找到的行设置“ungraded”为“graded”。

id | type   | data
31 | end    | legacy
31 | status | ungraded
31 | other  | something
56 | start  | legacy
56 | status | ungraded
56 | foo    | bar 

在上面的情况下,id“31”“ungraded”将被设置为“graded”,因为具有相同id的另一行具有“end”作为“type”但是id“56”将保持“ungraded”为“type” “设置为”开始“。

我可以使用标准的MySQL内容(例如连接,子查询等),但我不知道如何开始这个,抱歉。

1 个答案:

答案 0 :(得分:2)

您可以使用exists运算符

UPDATE mytable t
SET    data = 'graded'
WHERE  t.type = 'status' AND
       t.data = 'ungraded' AND
       EXISTS (SELECT *
               FROM   mytable s
               WHERE  t.id = s.id AND
                      s.type = 'end' AND
                      s.data = 'legacy');