2013-02-28 173 views
1

我正在尝试更新数据库中的特定列。SQL:UPDATE INNER JOIN WITH LIMIT

此查询的工作:

UPDATE table1 A INNER JOIN table2 B 
ON A.type = B.typeName 
SET A.closed = 0, A.sample = 0 
WHERE A.`status` IN ('Finished', 'Exception', 'Query') AND A.date BETWEEN '2013-01-01' AND '2013-01-31' 
AND A.code IN ('ex1','ex2','ex3') 
AND A.closed = 0 AND B.order = 'Non-Order' AND A.userName = 'test'; 

但是,当我试图把一个极限,它说:

Incorrect usage of UPDATE and LIMIT 

UPDATE table1 A INNER JOIN table2 B 
ON A.type = B.typeName 
SET A.closed = 0, A.sample = 0 
WHERE A.`status` IN ('Finished', 'Exception', 'Query') AND A.date BETWEEN '2013-01-01' AND '2013-01-31' 
AND A.code IN ('ex1','ex2','ex3') 
AND A.closed = 0 AND B.order = 'Non-Order' AND A.userName = 'test' LIMIT 3; 

我怎样才能使这个更新与限制?非常感谢!

[EDIT] 

我已经做了我想要的,但它很慢,花了6秒更新3行。

这里的查询:

UPDATE table1 SET closed=1, sample=1 
WHERE id IN (
    SELECT id FROM (
     SELECT id FROM table1 A 
     INNER JOIN table2 B ON A.type = B.typeName 
     WHERE A.`status` IN ('Finished', 'Exception', 'Query') AND A.date BETWEEN '2013-01-01' AND '2013-01-31' 
    AND A.code IN ('ex1','ex2','ex3') 
    AND A.closed = 0 AND B.order = 'Non-Order' AND A.userName = 'test' LIMIT 3 
    ) tmp 
); 

我怎么能再次优化这个查询的感谢!

回答

4

你就是不行。

根据MySQL docs for UPDATE

For the multiple-table syntax, UPDATE updates rows in each table named in 
table_references that satisfy the conditions. In this case, ORDER BY and LIMIT 
cannot be used. 

UPDATE 1

UPDATE table1 a 
     INNER JOIN 
     (
      SELECT id 
      FROM table1 A 
        INNER JOIN table2 B 
         ON A.type = B.typeName 
      WHERE A.status IN ('Finished', 'Exception', 'Query') AND 
        A.date BETWEEN '2013-01-01' AND '2013-01-31' AND 
        A.code IN ('ex1','ex2','ex3') AND 
        A.closed = 0 AND 
        B.order = 'Non-Order' AND 
        A.userName = 'test' 
      LIMIT 3 
     ) tmp ON a.ID = tmp.ID 
SET  a.closed = 1, 
     a.sample = 1 
+0

给他一个解决方法。做到这一点。 – Scotch 2013-02-28 05:43:20

+0

@JW感谢您的链接,请参阅我的编辑!谢谢! – jomsk1e 2013-02-28 06:23:54

+0

如何更新asnwer。 – 2013-03-01 00:29:09

0

LIMIT只能在SELECT语句中。如果你想限制没有。的影响你的UPDATE语句的记录,你必须使用WHERE。

+0

这是不正确的。 'UPDATE'语句中仍然可以使用'LIMIT',但在更新多个表时不能使用。 – 2013-02-28 05:36:15

+0

@JW。任何参考将不胜感激。 – 2013-02-28 05:39:13

+0

这里[MySQL docs for UPDATE](http://dev.mysql.com/doc/refman/5.0/en/update.html) – 2013-02-28 05:41:45