如何使用同一列中的其他值更新MySQL行?

时间:2017-11-02 11:10:05

标签: mysql sql-update match rows

我在MySQL中有一个表,其中有一些错误的数据显示为0 col3,而不是正确的值。

这些损坏行的col3列的正确值显示在具有col1col2col4值的其他行中col3不是0。 (col1与所有行的值相同,只等于US。)

因此,为了解决这个问题,我只需要将所有col3行等同于0,并将这些col3设置为col3的值col3 1}}不等于0col1 = 'US'col2col4匹配的位置。

这样的事情:

UPDATE Table1 WHERE col1= 'US' AND col3 = '0' AND col2 = x AND col4 = y SET col3 = (SELECT col3 FROM Table1 WHERE col1= 'US' AND col2 = x AND col4 = y AND col3 != '0'

但是我如何在MySQL中实际做到这一点,因为我上面用xy作为占位符来解释逻辑。

2 个答案:

答案 0 :(得分:3)

在MySQL中,您可以使用JOIN

执行此操作
UPDATE Table1 t1 JOIN
       (SELECT t1.*
        FROM Table1 t1
        WHERE col3 <> 0 AND col1 = 'US'
       ) tt1
       ON tt1.col2 = t1.col2 AND tt1.col4 = t1.col4
   SET t1.col3 = tt1.col3
   WHERE t1.col3 = 0;

答案 1 :(得分:1)

进行自我加入更新:

UPDATE Table1 a
INNER JOIN Table1 b
    ON a.col2 = b.col2 AND
       a.col4 = b.col4 AND
       b.col3 <> 0
SET a.col3 = b.col3
WHERE
    a.col3 = 0 AND
    a.col1 = 'US'