【问题标题】:PostgreSQL, delete values from a table that match the output of a query on the table the values are being deleted fromPostgreSQL,从表中删除与正在删除值的表上的查询输出相匹配的值
【发布时间】:2022-01-07 15:11:42
【问题描述】:

我每天都在从数据库中捕获数据,方法是使用查询运行插入语句以及运行查询时当前日期的值。

为了防止表格变得太大,我想删除“ID”和“状态”组合与前一天相同的所有值

我的表结构如下:

|日期|电子邮件|状态|

delete from table sct
using
(
select "Email", min("Date") as "First Date of Status", "Status" from table sct
group by "Email", "Status"
) as t1
where sct."Email" = t1."Email" and sct."Date" = t1."First Date of Status" and sct."Status" = t1."Status"
and t1."First Date of Status" is null

由于我只想捕获状态更改的第一个日期,因此我想删除“状态的第一个日期”值为 null 的所有行

但是当我运行这个语句时,原始表中的任何行都没有被删除。

任何关于如何修复此语句或解决此问题的替代方法的反馈将不胜感激。

【问题讨论】:

  • 如果你有一个可以用来获取唯一行号的主键列(例如id),这个问题可能更容易解决。然后您可以使用 CTE WITH 子句来选择要删除的行。类似WITH a AS (SELECT id FROM sct WHERE.....); DELETE FROM TABLE sct WHERE id IN a.id

标签: postgresql sql-delete


【解决方案1】:
and sct."Date" = t1."First Date of Status" 
             and t1."First Date of Status" is null

这永远不会奏效。您需要了解三值逻辑。 null = null 返回未知,不正确。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 2018-01-13
    • 2018-02-08
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多