这个问题几乎完成了我想要完成的任务,但是我的表更复杂并且没有主键。我也不太明白最上面的答案,t1 和 t2 是什么意思。如果这个答案适用于我,如果有人解释代码,我将不胜感激。
我有几个月的表格,其中包含有关客户及其持有的保单的信息。每个客户端都有一个唯一的策略 ID,但它们可以有多个策略,从而导致同一策略 ID 下有多个记录。每个字段中的重复记录可以完全不同或完全相同。
出于我的目的,我只想为每个策略 ID 保留一条记录。理想情况下,保留的记录是 Age 最高的记录,但如果太复杂则不需要。请注意,可能有多个记录的年龄是该特定策略 ID 的最大值,那么我们保留其中哪一项并不重要。
我不打算创建主键,因为在某些情况下我会在同一个策略 ID 下保留两条记录,我会自己对代码进行修改。我也不想创建另一个表,因为我正在使用 10 多个表。有人建议使用first(),但我不确定如何将其合并到查询中。
如果您需要任何其他信息,请告诉我,并提前感谢您的帮助!
=========更新#1
好吧,看起来我的问题有点不切实际,所以我将添加一个自动编号主键。我将如何进行?
像这里一样,我有一个大表,用于存储我们系统中的所有事件,对于一种事件类型,我有重复的行(多次错误地从另一个系统导出)。我需要删除它们以清除统计数据。上面提出的解决方案是
但在我的情况下,我只需要删除一类事件,而不是所有行,这对于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 字段。那么在这种情况下最快的决定是什么?从临时表中删除+插入是唯一的选择吗?
的基本语法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) 我有数据存储在 ms sql 数据库中。我想删除早于某个日期的所有记录。为此,使用了每天发送一次请求的服务,例如:
delete from [log].[HttpRequestLogEntries] where DateTimeUtc < dateadd(day, -3, getutcdate())
它工作正常,但速度很慢。在我的表中可以有超过 10kk 行,删除工作可能需要几个小时。如何以最好的方式解决这个问题?
我想知道如何删除表中完全重复的行并只保留一个。例如这张桌子。
到
我读过的大多数线程都已使用id或unique_key在这种情况下我没有使用。
编辑:当我说remove我的意思delete是表中的那些记录时,我又没有 id 来引用以创建条件以保留一条记录。对困惑感到抱歉。
先感谢您。
这可能是与其他线程相同的问题。但是,他们未能解释 fa06 成功提供的 ctid 是什么。所以,我会说我问的是使用相同的词但不同的问题。请删除“标记重复”。谢谢。
我创建了一个表,插入数据,然后删除一个不存在的行,即使该行不存在,操作也成功。当我删除实际存在的行时,它也会成功并且该行被实际删除。为什么当我尝试删除不存在的行时不会发生错误?
我在 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) 有两个表Document和DocumentPos。在Document有列GUID和在DocumentPos是DocumentGUID指表的列Document。
我想让每一行都在
DocumentPos它DocumentGUID现在的行中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。这DocumentGUID是NOT IN表Document作为GUID.
但select * from Document where GUID = 'B479BCB72334424DAC1B7CC26880DAB8'返回 0 行。
我想像这样构建查询,因为它应该成为一个DELETE …
我在 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 吗?
带有安全限制的简单 DELETE 会引发语法错误:
DELETE FROM system."products" LIMIT 1
Run Code Online (Sandbox Code Playgroud)
错误:“LIMIT”处的语法错误
SQL 状态:42601
如何限制要删除的行数?
(PostgresSQL 9.6 版)
我有一项任务是根据两个表之间的条件删除一个表中的行(我加入了多个列,因为没有 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-delete ×10
sql ×5
postgresql ×4
sql-server ×4
duplicates ×2
subquery ×2
t-sql ×2
c++ ×1
join ×1
limit ×1
sql-null ×1
sqlite ×1