我想运行一个SQL语句,将只删除第二个值例如吨-SQL - 删除第二个值仅
delete from table1 where condition1
我想这种说法只删除第二个值
如何我能完成这个吗?
我想澄清一下。我有一个名为field1
的字段,它是一个自动编号,并且它是一个主键,它会递增。我想删除包含更多数量的
我想运行一个SQL语句,将只删除第二个值例如吨-SQL - 删除第二个值仅
delete from table1 where condition1
我想这种说法只删除第二个值
如何我能完成这个吗?
我想澄清一下。我有一个名为field1
的字段,它是一个自动编号,并且它是一个主键,它会递增。我想删除包含更多数量的
您也可以使用SQL服务器的ROW_NUMBER()
函数对每一行进行编号,并根据您在内部查询(over (ORDER BY <myKey> asc)
)中的自定义排序,使用此编号隔离第二个要删除的项目。这提供了很大的灵活性。
DELETE a FROM table1
FROM table1 a
JOIN (
select ROW_NUMBER() over (ORDER BY <myKey> asc) as AutoNumber, <myKey> from table1
) b on a.<myKey> = b.<myKey>
WHERE condition1
AND b.AutoNumber = 2
试试这个记录:
DELETE MyTable
FROM MyTable
LEFT OUTER JOIN (
SELECT MIN(id) as id, Col1, Col2, Col3
FROM MyTable
GROUP BY Col1, Col2, Col3
) as KeepRows ON
MyTable.id= KeepRows.id
WHERE
KeepRows.RowId IS NULL
UPDATE
虽然这可能不会像“漂亮”为@杰弗里的工作原理。据我所知,@ Jeffrey's没有。请参阅下面的SQL(删除与SELECT *
取代了演示):
WITH TEMP as
(
SELECT 1 as id,'A' as a,'Z' as b
UNION
SELECT 2,'A','Z'
UNION
SELECT 3,'B','Z'
UNION
SELECT 4,'B','Z'
)
SELECT *
FROM TEMP
LEFT OUTER JOIN (
SELECT MIN(id) as id, a, b
FROM TEMP
GROUP BY a, b
) as KeepRows ON
temp.id= KeepRows.id
WHERE
KeepRows.id IS NULL
DELETE MyTable FROM MyTable ?? – 2010-12-08 21:05:09
它已经有一段时间(所以我的语法我不太是正确的),而这可能不是最好的解决办法,但“学术”的答案会是这样的:
delete from table1 where condition1
and field1 = (select max(field1) from table1 where condition1)
是否只想删除最后一个副本,或者只删除第一个副本?
为所有,但第一种:(编辑使用CTE每@马丁的建议)
with target as (select * from table1 where condition1)
delete from target goner
where exists (select * from target keeper
where keeper.field1 < goner.field1)
换句话说,如果以较低的field1的另一个匹配的记录,删除该记录。
编辑: 只删除最后:
with target as (select * from table1 where condition1)
delete from target goner
where exists (select * from target keeper
where keeper.field1 < goner.field1)
and not exists (select * from target missing
where missing.field1 > goner.field1)
换句话说,如果以较低的field1的另一个匹配的记录,并有具有较高FIELD1没有匹配的记录,那么我们有最高的重复,所以核弹它。
你如何确定哪个值来自“第一”,哪个值来自“第二”? – 2010-12-08 20:59:51
这是否意味着清除重复条目?这看起来很像。 – guildsbounty 2010-12-08 21:01:37
@anon谢谢我已澄清 – 2010-12-08 21:03:17