MySQL UPDATE表WHERE行数大于n

时间:2015-07-20 10:26:32

标签: php mysql

在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语句以实现我的意图。 提前谢谢。

2 个答案:

答案 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. 活性= 1

  2. 表中有20条记录,其中active = 2

  3. <强>结果:

    没有更新的

    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

相关问题