我正在尝试优化查询,并且我有以下代码:
<?php
$counter = mysql_query("SELECT COUNT(*) AS c FROM table");
$row = mysql_fetch_array($counter);
$count = $row["c"];
if($count>500){
mysql_query("DELETE FROM table");
}
?>
我尝试使用以下语法作为测试,但它有效:
Select case when (Select count(*) as t from `table`) > 500 then 1 else 2 end
但这会引发错误:
Select case when (Select count(*) as t from `table`) > 500 then (DELETE FROM table) else null end
1064 - 您的SQL语法出错;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近'DELETE FROM table else null end LIMIT 0,25'at line 1
我理解存在语法错误,但我的主要问题是为什么case语句在我将整数放入条件时起作用,但delete语句会抛出错误。我尝试了一个select语句,它运行良好:
Select case when (Select count(*) as t from `table`) < 500 then (select count(*) from table) else null end
答案 0 :(得分:3)
如果真的希望使用单个delete
执行此操作:
delete t
from table t cross join
(select count(*) as cnt from table t) c
where c.cnt > 500;
请注意(如BWS所做的那样)truncate table
效率更高,尽管您不能使用where
子句或join
使用truncate table
答案 1 :(得分:1)
如果您尝试删除表中的所有行,只需使用&#34; TRUNCATE表&#34;
答案 2 :(得分:0)
CASE
语句在SELECT
语句生成单个值时(即,它只选择一列,结果集只有一行),SELECT
语句与DELETE
一起使用;它不起作用。显然,INSERT
(或UPDATE
,{{1}}等)永远不会在该位置上运作。