使用不同的行值使用一个查询更新多行

时间:2015-02-05 19:20:41

标签: mysql

我不知道如何清楚标题。

使用shared_id连接自己的表后,我得到以下数据。

a.id   | a.shared_id | a.key     | a.value         | b.id   | b.shared_id | b.key       | b.value
198131 | 6044        | unique-id | E15SJOEMGRMH013 | 198281 |6044         | _unique_id  |

这是以下结果:

SELECT * FROM
(SELECT * FROM table1 WHERE key='unique-id') AS a
JOIN
(SELECT * FROM table1 WHERE key='_unique_id') AS b
ON a.shared_id = b.shared_id
WHERE a.value!='' AND a.value!=b.value AND a.key='unique-id'
;

我需要的是一个更新语句,它将b.value设置为a.values值。所以在这1行示例中,我希望b.value为E15SJOEMGRMH013

现在记住a.id和b.id不一样,键被称为略有不同的东西,但它们应该保持相同的值。有几百行,所以我想在一个更新查询中执行此操作。

1 个答案:

答案 0 :(得分:2)

您不需要子查询,而您对它们的使用可能就是您无法找出相应的UPDATE查询的原因。

UPDATE table1 AS a
JOIN table1 AS b ON a.shared_id = b.shared_id
SET b.value = a.value
WHERE a.key = 'unique-id' AND b.key = '_unique_id'
    AND a.value != ''

SELECT应该只是:

SELECT *
FROM table1 AS a
JOIN table1 AS b ON a.shared_id = b.shared_id AND a.value != b.value
WHERE a.key = 'unique-id' AND b.key = '_unique_id'
    AND a.value != ''

您不需要a.value != b.value中的UPDATE条款 - 如果它们相同,则UPDATE不会执行任何操作。