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

如何使用同一列中的其他值更新MySQL行?,mysql,sql-update,match,rows,Mysql,Sql Update,Match,Rows,我在MySQL中有一个表,它有一些错误的数据,在col3中显示为0,而不是正确的值 这些损坏行的col3列的正确值显示在具有相同col1、col2和col4值的其他行中,其中col3不是0。col1对于所有行都是相同的值,只等于US 为了解决这个问题,我只需要得到所有等于0的col3行,并将这些col3设置为col3的值,其中col3不等于0,其中col1='US',col2和col4匹配 大概是这样的: UPDATE Table1 WHERE col1= 'US' AND col3 = '0'

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

这些损坏行的col3列的正确值显示在具有相同col1、col2和col4值的其他行中,其中col3不是0。col1对于所有行都是相同的值,只等于US

为了解决这个问题,我只需要得到所有等于0的col3行,并将这些col3设置为col3的值,其中col3不等于0,其中col1='US',col2和col4匹配

大概是这样的:

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中,我实际上是如何做到这一点的,因为我刚才使用了上面的x和y作为占位符来解释逻辑。

进行自连接更新:

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'
执行自加入更新:

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'

在MySQL中,您可以通过连接来实现这一点:


在MySQL中,您可以通过连接来实现这一点:


你能解释一下这是怎么回事吗?例如,在这种情况下,x和y是什么?我只是用它们作为占位符来解释我想要的逻辑。谢谢你。@ProgrammerGirl。我误解了这个问题。它们是col2和col4。你能解释一下这是怎么回事吗?例如,在这种情况下,x和y是什么?我只是用它们作为占位符来解释我想要的逻辑。谢谢你。@ProgrammerGirl。我误解了这个问题。它们是col2和col4。你的解决方案与Gordon Linoff的相比如何?我认为Gordon的查询和我的查询应该做同样的事情,但他以这样一种方式编写他的查询,这样查询就不那么难看了。测试两者,如果两者都有效,那么就选择你最喜欢的一个。你的解决方案与Gordon Linoff的相比如何?我认为Gordon的查询和我的查询应该做同样的事情,但他写他的查询的方式使查询不那么难看。测试两者,如果两者都有效,那么选择你最喜欢的一个。