2016-11-20 53 views
0

我想更新TableA与从TableB值,匹配的唯一id字段并添加WHERE条件。 搜索网页并找到下面的代码。出于某种原因,MYSQL声明存在语法错误。MYSQL:更新从内部联接语法错误

UPDATE 
    TableA 
SET 
    TableA.field1 = TableB.field1 
FROM 
    TableA 
INNER JOIN 
    TableB 
ON 
    TableA.id = TableB.id 
WHERE 
    TableA.field1 <> '' 
LIMIT 100; 

回答

1

在MySQL正确的语法是:

UPDATE TableA INNER JOIN 
     TableB 
     ON TableA.id = TableB.id 
    SET TableA.field1 = TableB.field1 
WHERE TableA.field1 <> ''; 

作为一个说明:你不能用JOIN使用LIMIT

如果你想使用LIMIT,你可以这样做:

UPDATE TableA 
    SET TableA.field1 = (SELECT TableB.field1 FROM TableB WHERE TableA.id = TableB.id) 
    WHERE TableA.field1 <> '' AND 
      EXISTS (SELECT 1 FROM TableB WHERE TableA.id = TableB.id) 
    LIMIT 100; 

(你可以离开了EXISTS表达,如果你知道总会有TableB比赛可以若再加上LIMIT 1到子查询。 )

我建议你总是使用ORDER BYLIMIT以及。这样,您可以控制哪些行正在更新。