请考虑下表.

CREATE TABLE my_table
(
    cost decimal(10,2),
    ref int
);

INSERT INTO my_table(cost, ref)
VALUES      (0.00, 1),
            (0.50, 1),
            (-1.89, 1),
            (0.00, 2),
            (0.00, 2),
            (0.00, 2),
            (1.23, 3),
            (-9.47, 3),
            (111.23, 3),
            (12.00, 3);

我使用该表的目的是对其进行筛选,以删除ref = 2处的所有行(上面的第4、5和6行),因为ref = 2处的所有成本值都为零.

通过计算ref的哪些值至少有一行成本不为零,我已经做到了一半:

SELECT DISTINCT ref
INTO            refs_to_keep
FROM            my_table
WHERE           cost != 0.00;

所以我想要做的就是完成这项工作

DELETE FROM my_table
WHERE ref NOT IN "list of refs in the refs_to_keep table";

但我不知道它的语法.有谁能帮帮我吗?

或者,也许有其他方法可以在没有中间refs_to_keep阶段的情况下实现这一点?

推荐答案

是的,您几乎已经在那里了,尽管您不需要创建临时表,您只需使用子查询:

delete from my_table
where ref not in 
(
  select distinct ref
  from my_table
  where cost <> 0
)

你可以看到它在这里工作:https://www.db-fiddle.com/f/fAYuenfopm4BkYFRNMKY9w/0

Sql相关问答推荐

使用自动增量ID插入失败(无法将值空插入列ID)

用相同值更新行

如何在Snowflake SQL存储过程中传递LIMIT和OFFSET的参数?

在postgres中动态计算出现次数并插入到json中

前面的语句不喜欢AND LIKE?当try 更新使用ID和日期过滤的表时

删除MariaDB数据库中的JSON数据

使用sede获取不一定有两个不同标签的所有问题

为什么两个不同的窗口函数给出不同的排序结果?

如何在presto/SQL中使用两个数组列创建(分解)单独的行

如何在snowflake中进行SQL的反向填充

根据是否出现过零来筛选数据(跨多行)

将伪数据插入Postgres表

使用左外部联接更正列中第+1行的值时重复

如何根据 SQL 中的阈值标记一个集群中的所有值?

GRAFANA 数据库查询错误:pq:列名称不存在

SQL 查询是否返回列表中仅包含某些值而不包含其他值的行?

如何在 JSONB 数组的每个对象中添加新的键值对- PostgreSQL

按公司和产品查询最近发票的平均价格的SQL查询

MariaDB非常简单的MATCHAGAINST查询不使用FULLTEXT索引吗?

SQL中所有先前日期的累计总和