在MySQL-Table中,我尝试按如下方式更新它:
UPDATE MyTable SET active=2 WHERE ((active=1) AND (If the number of rows > 20 then active=2) );
我的意思是,WHERE-Condition应该是(active = 1),第二个条件是表中的行数应该限制为20。 以下是我的错误的方法。也许有助于理解我试图说或做的事情:
UPDATE MyTable SET active=2 WHERE ( (active=1) AND
((SELECT id, @rownum:=@rownum + 1 as Row_Number from MyTable) JOIN (SELECT @rownum := 0) r)
, Row_Number>20)
为了更好地理解它,我尝试将SQL-Statement编写为代码片段,如下所示:
if(Row_Number<20) {
// It's not interesting.
}else {
for(var i=20; i<NumberOfRecords; i++) {
active=2;
}
}
任何想法如何编写正确的MySQL语句以实现我的意图。 提前谢谢。
答案 0 :(得分:2)
我认为这就是你所追求的目标:
UPDATE MyTable
SET active=2
WHERE active=1
AND (SELECT COUNT(*) FROM (SELECT * FROM MyTable WHERE active=2) as tbl) >20
<强>解释强>
此查询将为满足以下条件的记录更新active = 2:
活性= 1
表中有20条记录,其中active = 2
<强>结果:强>
没有更新的SQL Fiddle(acive = 2没有20条记录)
带有更新的SQL Fiddle(有20条记录,其中acive = 2)
答案 1 :(得分:1)
这样的事情应该有效:
UPDATE MyTable
SET active = 2
WHERE active = 1
AND (SELECT COUNT(*) FROM (SELECT * FROM MyTable) a) > 20
在MySQL中,您必须创建一个子查询来绕过“您无法在FROM子句中指定MyTable以进行更新”错误。有关详细信息,请参阅this post。
请参阅this fiddle。