如果表的记录少于 n 则删除表

Posted

技术标签:

【中文标题】如果表的记录少于 n 则删除表【英文标题】:Drop table if it has less than n records 【发布时间】:2016-03-21 18:40:31 【问题描述】:

我正在尝试使用postgres,但无法让这个简单的查询工作:

drop table mytable if (select count(*) from mytable)<50 ;

这给出了错误:

ERROR:  syntax error at or near "if"
LINE 1: drop table tablename if (select count(*) from mytable)<50 ;

在给定条件下如何更改/删除 postgres 中的表?

【问题讨论】:

Postgres 不支持DROP TABLE 上的WHEREIF 子句:postgresql.org/docs/current/static/sql-droptable.html 为什么要这样做?但要回答您的问题,请将drop 放在if 之后。在互联网上询问陌生人之前,请先阅读文档。 【参考方案1】:

为此创建动态 SQL 有效(参见 answer)-

do
$$
declare
  l_count integer;
begin
  select count(*)
     into l_count
  from pg_class c
    join pg_namespace nsp on c.relnamespace = nsp.oid
  where c.relname = 'mytable' 
    and nsp.nspname = 'public';
  if l_count < 50 then 
    execute 'drop table mytable';
  end if;
end;
$$

【讨论】:

以上是关于如果表的记录少于 n 则删除表的主要内容,如果未能解决你的问题,请参考以下文章

删除许多带有子表的记录

请问TRUNCATE TABLE 与 DELETE在删除整个表的所有记录时的区别

sql server中如何快速批量删除表里的百万条记录!直接用delete top(50000)还是有点慢...

删除表的记录的sql命令是啥?

如果每个工作表中的字符串匹配,则修复删除行

Java中,sql查询表中是不是有某条记录,如果有,则不进行操作,如果没有,则添加此记录到数据库表中;