Mysql - 根据重复的Table_1值更新某些Table_2值

时间:2013-12-18 01:48:45

标签: mysql sql database

我有两个表 - Table_1和Table_2。

它们具有相同的列 - Col1,Col2,Col3,Col4(整数)。

表2的行包含以下值:

   Col1,Col2,Col3,Col4
1) a   ,b   ,0   ,0      (From Table_1)

Table_1具有与Col1和Col2相对应的重复值。

例如:

   Col1,Col2,Col3,Col4
1) a   ,b   ,0   ,1      (From Table_1) 
2) a   ,b   ,1   ,0      (From Table_1)
3) a   ,b   ,0   ,0      (From Table_1)

Col4(第1行)有一个'1',Col3(第2行)有'1'。

每当Table_1中Table_2行的副本的任何列都有1时,请将1应用于相应的列。

因此Table_2的最终值将是:

   Col1,Col2,Col3,Col4
1) a   ,b   ,1   ,1      (From Table_1)

我试过

UPDATE Table_2 JOIN
       Table_1 ur
       ON Table_1.Col1 = Table_2.Col1 and Table_1.Col2 = Table_2.Col2
    SET Table_2.Col3 = if(Table_1.Col3 = 1,1,Col3), Table_2.Col4 = if(Table_1.Col4 = 1,1,Col4)

但它给了我以下结果:

   Col1,Col2,Col3,Col4
1) a   ,b   ,0   ,1      (From Table_1)

这意味着它只考虑第一场比赛。我怎样才能考虑表1中的所有匹配?

1 个答案:

答案 0 :(得分:0)

鉴于列名中含糊不清,我很惊讶你的update有效。尝试使用显式表别名:

UPDATE Table_2 JOIN
       Table_1 ur
       ON ur.Col1 = Table_2.Col1 and ur.Col2 = Table_2.Col2
    SET Col3 = if(ur.Col3 = 1, 1, Table_2.Col3),
        Col4 = if(ur.Col4 = 1, 1, Table_2.Col4);

或者,更简单的公式(假设值始终为0和1):

UPDATE Table_2 JOIN
       Table_1 ur
       ON ur.Col1 = Table_2.Col1 and ur.Col2 = Table_2.Col2
    SET Col3 = greatest(ur.Col3, Table_2.Col3),
        Col4 = greatest(ur.Col4, Table_2.Col4);

编辑:

哦,我知道,Table_1中有多行可用于更新。将(任意)选择其中一行进行更新。在这种情况下,您需要预先聚合表。

UPDATE Table_2 JOIN
       (select col1, col2, max(col3) as col3, max(col4) as col4
        from Table_1
        group by col1, col2
       ) ur
       ON ur.Col1 = Table_2.Col1 and ur.Col2 = Table_2.Col2
    SET Col3 = greatest(ur.Col3, Table_2.Col3),
        Col4 = greatest(ur.Col4, Table_2.Col4);