2012-10-18 82 views
0

可能重复:
Delete script SQL Server 2008在SQL Server 2008的重复

这里是我试图解决的情况。我有一个加载了重复的表格。它发生的原因是类似的行从两个或更多不同的来源加载。这在包装中正在被照顾。

但我想删除那些重复的行。这里没有关键属性。来源的例子是Cleveland CityOhio State。我有一列显示从哪个源加载行(DataSource列)。

因此在行中显示为DataSource = 'Cleveland'DataSource = 'Ohio'

我想保留那些从俄亥俄州加载时导致重复的记录。它的100k条记录我可能不得不使用连接。还有一件事,我的主桌与其他四个或五个桌子连在一起,每个桌子都有独特的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') 
+0

你的问题可能会更好地迁移到[代码审查 - 堆栈交易所(http://codereview.stackexchange.com/faq )用于共享您正在为同行评审工作的项目的代码。 – Tony

回答

0

试试这个

请确保您有列比较重复,以便通过列u在你的情况我写的说明在这里保持递增或递减,首先尝试通过注释选择行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 
+0

,感谢您查看我的问题。您的建议确实有效,但我的问题是我与其他表的联接,因为我有100k记录我必须使用联接。并且由于fk约束,它不允许我执行删除操作。再次感谢..我希望这有点意义。 –

+0

ohoo你可以这样做,获取重复的uid到临时表中并按顺序删除表示从小孩到父母 –