简体   繁体   English

SQL:使用LIMIT更新INNER JOIN

[英]SQL: UPDATE with INNER JOIN with LIMIT

I am trying to update specific column in my database. 我正在尝试更新数据库中的特定列。

This query works: 此查询有效:

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';

But when I tried to put a limit, it says: 但当我试图限制时,它说:

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;

How can I make this Update with the limit? 如何使用限制进行此更新? thanks a lot! 非常感谢!

[EDIT]

I already do what I want, but it is slow, took 6 secs to update 3 rows. 我已经做了我想做的事,但它很慢,需要6秒才能更新3行。

Here's the query: 这是查询:

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
 );

How can I optimize this query thanks again! 我怎样才能再次优化此查询!

You just can't. 你不能。

According to MySQL docs for UPDATE : 根据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 更新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

LIMIT can only be used on SELECT statements. LIMIT只能用于SELECT语句。 If you want to limit the no. 如果你想限制没有。 of records affected for your UPDATE statement, you'll have to use WHERE. 对于UPDATE语句受影响的记录,您必须使用WHERE。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM