2013-02-28 96 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