2016-04-26 75 views
0

ERROR [HY000] ERROR: Update canceled: attempt to update a target row with values from multiple join rows如何防止SQL多连接行错误并为多行应用值?

有没有办法避免这个错误并更新包含E的每一行,尽管有多个连接行?

UPDATE V 
SET 
V.S = M.S, 
V.T = M.T, 
V.U = M.U 
FROM MAP M 
WHERE AND V.E = M.E; 
+0

根据您的逻辑,一种替代方法是使用像MIN或MAX这样的函数。 –

+0

另一种方法是使用ROW_NUMBER()(分区by .... order by ....)假设您知道要选择多个记录行中的哪一个。然后更新ROW_NUMBER()= 1 –

回答

1

您需要按E获取一个值。我会尝试使用row_number()

UPDATE V 
    SET V.S = M.S, 
     V.T = M.T, 
     V.U = M.U 
    FROM (SELECT M.*, ROW_NUMBER() OVER (PARTITION BY E ORDER BY E) as seqnum 
      FROM MAP M 
     ) M 
    WHERE V.E = M.E AND seqnum = 1; 

但是,您可能有其他的逻辑从要用于更新MAP选择特定值。