我有两个表 - 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中的所有匹配?
答案 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);