标签: sql-delete

保留第一个重复记录并删除其余记录

这个问题几乎完成了我想要完成的任务,但是我的表更复杂并且没有主键。我也不太明白最上面的答案,t1 和 t2 是什么意思。如果这个答案适用于我,如果有人解释代码,我将不胜感激。

我有几个月的表格,其中包含有关客户及其持有的保单的信息。每个客户端都有一个唯一的策略 ID,但它们可以有多个策略,从而导致同一策略 ID 下有多个记录。每个字段中的重复记录可以完全不同或完全相同。

出于我的目的,我只想为每个策略 ID 保留一条记录。理想情况下,保留的记录是 Age 最高的记录,但如果太复杂则不需要。请注意,可能有多个记录的年龄是该特定策略 ID 的最大值,那么我们保留其中哪一项并不重要。

我不打算创建主键,因为在某些情况下我会在同一个策略 ID 下保留两条记录,我会自己对代码进行修改。我也不想创建另一个表,因为我正在使用 10 多个表。有人建议使用first(),但我不确定如何将其合并到查询中。

如果您需要任何其他信息,请告诉我,并提前感谢您的帮助!

=========更新#1

好吧,看起来我的问题有点不切实际,所以我将添加一个自动编号主键。我将如何进行?

duplicates ms-access-2003 sql-delete

1
推荐指数
1
解决办法
8559
查看次数

从大型(> 100 MIo)postgresql 表中删除重复行(根据条件截断?)

这里一样,我有一个大表,用于存储我们系统中的所有事件,对于一种事件类型,我有重复的行(多次错误地从另一个系统导出)。我需要删除它们以清除统计数据。上面提出的解决方案是

  • 将记录(不重复)插入到临时表中,
  • 截断原始表并将它们重新插入。

但在我的情况下,我只需要删除一类事件,而不是所有行,这对于truncate. 我想知道我是否可以从 postgres USING 语法中受益,就像这个SO 答案一样,它提供了以下解决方案 -

DELETE FROM user_accounts 
USING user_accounts ua2   
WHERE user_accounts.email = ua2.email AND user_account.id < ua2.id;
Run Code Online (Sandbox Code Playgroud)

问题是我在这个大表中没有 id 字段。那么在这种情况下最快的决定是什么?从临时表中删除+插入是唯一的选择吗?

postgresql sql-delete

1
推荐指数
1
解决办法
2127
查看次数

PostgreSQL:删除子查询返回的行

的基本语法DELETE

DELETE FROM table
WHERE condition
Run Code Online (Sandbox Code Playgroud)

是否有一种直接的方法可以在DELETE语句中使用子查询/别名,如下所示?

DELETE FROM (subquery) as sub
WHERE condition
Run Code Online (Sandbox Code Playgroud)

下面是一个最小的工作表,我尝试使用子查询/别名失败:

---create table
create table orderT (
    id integer PRIMARY KEY,
    country_code   varchar(2),
    created_date date,
    closed_date date);

---populate table
INSERT INTO orderT VALUES (1, 'US', now(), now() + interval '1 day' * 21);
INSERT INTO orderT VALUES (2, 'CA', now(), now() + interval '1 day' * 35);

--This does not work    
    DELETE
    FROM
      (SELECT *
       FROM orderT) AS sub
    WHERE sub.id = …
Run Code Online (Sandbox Code Playgroud)

sql postgresql subquery sql-delete

1
推荐指数
1
解决办法
3441
查看次数

MS SQL 删除超过一个月的记录

我有数据存储在 ms sql 数据库中。我想删除早于某个日期的所有记录。为此,使用了每天发送一次请求的服务,例如:

delete from [log].[HttpRequestLogEntries] where DateTimeUtc < dateadd(day, -3, getutcdate())

它工作正常,但速度很慢。在我的表中可以有超过 10kk 行,删除工作可能需要几个小时。如何以最好的方式解决这个问题?

sql-server sql-delete

1
推荐指数
1
解决办法
1230
查看次数

PostgreSQL 删除没有 id 或 unique_key 的重复项

我想知道如何删除表中完全重复的行并只保留一个。例如这张桌子。

在此处输入图片说明

在此处输入图片说明

我读过的大多数线程都已使用idunique_key在这种情况下我没有使用。

编辑:当我说remove我的意思delete是表中的那些记录时,我又没有 id 来引用以创建条件以保留一条记录。对困惑感到抱歉。

先感谢您。

这可能是与其他线程相同的问题。但是,他们未能解释 fa06 成功提供的 ctid 是什么。所以,我会说我问的是使用相同的词但不同的问题。请删除“标记重复”。谢谢。

postgresql duplicates sql-delete

1
推荐指数
1
解决办法
1963
查看次数

为什么sqlite的删除总是成功,即使要删除的行不存在?

我创建了一个表,插入数据,然后删除一个不存在的行,即使该行不存在,操作也成功。当我删除实际存在的行时,它也会成功并且该行被实际删除。为什么当我尝试删除不存在的行时不会发生错误?

我在 Eclipse 上使用带有 C++ 的 sqlite3。我一直在使用一些在网上找到的代码,以及我自己的代码。其他操作,如 SELECT 和 INSERT 工作正常。DELETE 在行存在时起作用,甚至在行不存在时也起作用。

// 创建一个表

sql = "CREATE TABLE COMPANY("  \
"ID INT PRIMARY KEY     NOT NULL," \
"NAME           TEXT    NOT NULL," \
"AGE            INT     NOT NULL," \
"ADDRESS        CHAR(50)," \
"SALARY         REAL );";
Run Code Online (Sandbox Code Playgroud)

// 插入数据

sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " \   
"VALUES (1, 'Paul', 32, 'California', 20000.00 ); " \
"INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) "  \
"VALUES (2, 'Allen', 25, 'Texas', 15000.00 ); "     \
"INSERT INTO COMPANY …
Run Code Online (Sandbox Code Playgroud)

c++ sql sqlite sql-delete

1
推荐指数
1
解决办法
4188
查看次数

具有 NOT IN 和 WHERE 关系的 SQL 查询与 GUID

有两个表DocumentDocumentPos。在Document有列GUID和在DocumentPosDocumentGUID指表的列Document

我想让每一行都在DocumentPosDocumentGUID现在的行中Documents' GUID

我有这个返回 0 行的查询:

select *
FROM             Document d,
                 DocumentPos dp
WHERE            d.GUID = dp.DocumentGUID
AND              dp.DocumentGUID NOT IN (
                 SELECT d.GUID
                 FROM Document
)
Run Code Online (Sandbox Code Playgroud)

但是当我执行select * from documentpos它时,例如返回一行DocumentGUID= B479BCB72334424DAC1B7CC26880DAB8。这DocumentGUIDNOT INDocument作为GUID.

select * from Document where GUID = 'B479BCB72334424DAC1B7CC26880DAB8'返回 0 行。

我想像这样构建查询,因为它应该成为一个DELETE …

sql sql-server subquery sql-delete sql-null

1
推荐指数
1
解决办法
419
查看次数

从表中删除至少一个值为 NULL 的行

我在 MS SQL Server 中有下表:

RowID    PersonNum   Address1
  1      456         1 My street
  2      NULL        1 My street
  3      789         1 My street
  4      987         2 My street
  5      963         2 My street
  6      852         3 My street
  7      741         3 My street
  8      NULL        3 My street
Run Code Online (Sandbox Code Playgroud)

我想删除同一地址中的所有行,其中至少有一个 personnum = NULL

所以从上面,我需要删除 RowID 的 1、2、3、6、7、8。

RowID 的 4 和 5 没问题,因为它们有一个 PersonNum。我如何在 T SQL 中实现这一点?这可以使用 CTE 吗?

sql t-sql sql-server common-table-expression sql-delete

1
推荐指数
1
解决办法
67
查看次数

限制 Postgres 删除

带有安全限制的简单 DELETE 会引发语法错误:

DELETE FROM system."products" LIMIT 1
Run Code Online (Sandbox Code Playgroud)

错误:“LIMIT”处的语法错误

SQL 状态:42601

如何限制要删除的行数?

(PostgresSQL 9.6 版)

postgresql limit sql-delete

1
推荐指数
1
解决办法
1329
查看次数

DELETE 删除的行数少于必须删除的行数

我有一项任务是根据两个表之间的条件删除一个表中的行(我加入了多个列,因为没有 PRIMARY 或 UNIQUE KEY:

DELETE rf 
FROM #tempTable rf 
LEFT JOIN #tempTableInc rfi 
    ON rf.ID = rfi.ID
    AND rf.Code = rfi.Code 
    AND rf.Type = rfi.Type
    AND rf.Year = rfi.Year
WHERE rfi.Value != rf.Value
Run Code Online (Sandbox Code Playgroud)

如果我只写这段代码:

SELECTrf.*, rfi.Value rfi
FROM #tempTable rf 
    LEFT JOIN #tempTableInc rfi 
        ON rf.ID = rfi.ID
        AND rf.Code = rfi.Code 
        AND rf.Type = rfi.Type
        AND rf.Year = rfi.Year
    WHERE rfi.Value != rf.Value
Run Code Online (Sandbox Code Playgroud)

我收到例如 30 条记录。当我在DELETE语句中写它时,我只删除了 26 条记录。造成这种差异的原因可能是什么?

sql t-sql sql-server join sql-delete

1
推荐指数
1
解决办法
46
查看次数