我需要找到包含“未分类”的所有行,其中“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内容(例如连接,子查询等),但我不知道如何开始这个,抱歉。
答案 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');