如何在SQL中删除一条符合某些条件的记录?(内特扎)
我在一个表中有一些重复的记录,因为事实证明Netezza不支持主键上的约束检查。也就是说,我有一些信息完全相同的记录,我只想删除其中一个。我试过了如何在SQL中删除一条符合某些条件的记录?(内特扎),sql,netezza,Sql,Netezza,我在一个表中有一些重复的记录,因为事实证明Netezza不支持主键上的约束检查。也就是说,我有一些信息完全相同的记录,我只想删除其中一个。我试过了 delete from table_name where test_id=2025 limit 1 而且 delete from table_name where test_id=2025 rowsetlimit 1 然而,这两种选择都不起作用。我听到一个错误说 found 'limit'. Expecting a keyword 有没有办
delete from table_name where test_id=2025 limit 1
而且
delete from table_name where test_id=2025 rowsetlimit 1
然而,这两种选择都不起作用。我听到一个错误说
found 'limit'. Expecting a keyword
有没有办法限制此查询删除的记录?我知道我可以删除记录并重新插入,但这有点乏味,因为我将不得不这样做多次
请注意,这不是SQL Server或MySQL。这是针对Netezza的。如果Netezza不支持DELETE TOP 1或LIMIT关键字,则可能需要执行以下操作之一: 1添加某种自动递增的列,如ID,使每一行都是唯一的。不过,我不知道在创建表之后是否可以在Netezza中执行此操作 2使用某种编程语言以编程方式读取整个表,以编程方式消除重复项,然后删除所有行并再次插入。如果它们是其他表的引用,则可能无法执行此操作,在这种情况下,您可能必须临时删除约束 我希望这有帮助。请让我们知道
并供日后参考;;这就是为什么我个人总是创建一个自动递增的ID字段,即使我认为我永远不会使用它 如果记录相同,那么您可以执行以下操作
CREATE TABLE DUPES as
SELECT col11,col2,col3,col....... coln from source_table where test_id = 2025
group by
1,2,3..... n
DELETE FROM source_table where test_id = 2025
INSERT INTO Source_table select * from duoes
DROP TABLE DUPES
您甚至可以创建一个子查询来选择COUNT*>1的所有测试ID,以便在步骤1和3中自动查找重复项。GROUP BY 1,2,3,…,n将消除插入临时表时的重复项。下面的查询用于从表中删除重复项
DELETE FROM YOURTABLE
WHERE COLNAME1='XYZ' AND
(
COLNAME1,
ROWID
)
NOT IN
(
SELECT COLNAME1,
MAX(ROWID)
FROM YOURTABLENAME
WHERE COLNAME = 'XYZ'
GROUP BY COLNAME1
)
Netezza中是否允许使用rowid…据我所知,我认为Netezza中不会执行此查询…这很有帮助。我不喜欢这个坏消息,但我想我不能责怪那个信使。谢谢。这不就是将重复项插入新表,然后将重复项重新插入我的原始表吗?不过我喜欢这个想法的基础
-- remove duplicates from the <<TableName>> table
delete from <<TableName>>
where rowid not in
(
select min(rowid) from <<TableName>>
group by (col1,col2,col3)
);