我正在尝试更新数据库中的特定列。
下面的查询是有效的:
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
);我怎样才能优化这个查询呢?再次感谢!
发布于 2013-02-28 13:35:16
你就是不能。
根据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. 更新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发布于 2013-02-28 13:35:34
LIMIT只能用于SELECT语句。如果您想限制no。对于UPDATE语句受影响的记录,您必须使用WHERE。
https://stackoverflow.com/questions/15128189
复制相似问题