Sql server 2008 在SQL Server 2008中重复
可能重复:Sql server 2008 在SQL Server 2008中重复,sql-server-2008,Sql Server 2008,可能重复: 这是我正在努力解决的一个问题。我有一张表,上面有很多重复项。这是因为相似的行是从两个或多个不同的源加载的。这一点正在一揽子计划中得到解决 但是我想删除那些重复的行。这里没有键属性。来源的例子有克利夫兰市和俄亥俄州。我有一个列,显示从哪个源加载行(DataSourcecolumn) 因此,在该行中,它显示为DataSource='Cleveland'或DataSource='ohoi' 我想保留那些从俄亥俄州加载时产生的重复记录。它的10万条记录我可能不得不使用连接。还有一件事,我的
这是我正在努力解决的一个问题。我有一张表,上面有很多重复项。这是因为相似的行是从两个或多个不同的源加载的。这一点正在一揽子计划中得到解决 但是我想删除那些重复的行。这里没有键属性。来源的例子有
克利夫兰市
和俄亥俄州
。我有一个列,显示从哪个源加载行(DataSource
column)
因此,在该行中,它显示为DataSource='Cleveland'
或DataSource='ohoi'
我想保留那些从俄亥俄州加载时产生的重复记录。它的10万条记录我可能不得不使用连接。还有一件事,我的主表与其他四个或五个表连接在一起,它们的rId
对于每一行都是唯一的,这就是为什么你看到我与这些表连接,我认为我做得不对
你能帮我查一下我的工作吗?我真的很感激
--Delete ct from--this is to delete w/c is my main intention
SELECT *
FROM
(
(
SELECT Rid,UID,ADDRESS,City,State,Zip,DataSource
FROM F_staRes where dataSource='Ohio'
) O inner join
(
SELECT Rid,UID,ADDRESS,City,State,Zip,DataSource
FROM F_staRes
where DataSource in ('Clev','Columbus')
) ct
on O.UID=ct.UID and O.ADDRESS=ct.ADDRESS and O.City=ct.City and
O.State=ct.State and O.zip=ct.zip
join dbo.ResOrig ro
on ct.rId=ro.rId
join dbo.ResSta rs
on ct.rId=rs.rId
join dbo.ResDest rd
on ct.rId=rd.rId
where ct.DataSource in ('Clev','Columbus')
试试这个
确保您有列来比较重复项,并且按列的顺序,您必须在此处保留asc或desc在您的情况下我编写了desc,首先尝试通过注释delete语句来选择行它将显示已删除的行如果您只需执行脚本
;WITH tbl_online AS (
SELECT *,ROW_NUMBER () OVER (
PARTITION BY UID,ADDRESS,City,State,Zip ORDER BY DataSource DESC) AS Rnum
FROM F_staRes)
--SELECT * FROM tbl_online WHERE Rnum >1
DELETE FROM tbl_online WHERE Rnum >1
您的问题最好迁移到共享您正在进行的项目代码以供同行审阅的位置。感谢您调查我的问题。您的建议确实有效,但我的问题是我是否加入其他表,由于我有100k rec,我必须使用联接。由于fk约束,它不允许我执行删除操作。再次感谢。我希望这有点道理。ohoo您可以这样做,将重复的uid放入临时表中,并按顺序从子级删除到父级