[英]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.