2015-11-24 17 views
-1

我有這個樣本數據: -如何刪除列didn`t重複在同一個表

=============== 
pageid||SiteID 
=============== 
    61 || 1 

    62 || 1 

    63 || 1 

    62 || 2 

此表refrence到其他表頁面,PAGEID其他 表中是唯一

我需要刪除此表和參考表中的數據....但如果記錄重複其他站點ID我不能刪除它,當我選擇與si TE ID的所有的pageid將刪除(我可以刪除我想keept它在頁表中所有的pageid但62)

+0

要刪除沒有多個條目的pageid? – bmsqldev

+0

我需要刪除所有的pageid例如(siteid = 1)...但頁面id存儲與網站id 1和2,然後我必須排除它從我的查詢.. – ayman2000

回答

1
DELETE FROM @Page_Site 
WHERE [email protected] 
AND pageID not 
in(
    SELECT pageID 
    FROM @Page_Site p2 
    WHERE [email protected] 
); 

我不能確定你如何使用您的查詢,所以我格式化它作爲一個參數化查詢。否則,您只需將@siteID的兩個實例替換爲任何給定的值即可。

0

您需要在2個查詢中執行此操作。首先刪除所有鏈接的ID,其次刪除

delete from pageSiteLinks 
where pageid in (
    select pageid 
    from pageSiteLinks 
    group by pageid 
    having count(SiteID) = 1 
); 

delete from pages 
where pageid not in (
    select pageid 
    from pageSiteLinks 
); 
1

使用NOT EXISTS條款頁面本身,以防止刪除不同的siteID

使用的pageid的試試這個:

DELETE FROM yourtable 
WHERE NOT EXISTS(
    SELECT 'OTHERSITE' 
    FROM yourtable T2 
    WHERE T2.pageid = yourtable.pageid 
    AND T2.siteID <> yourtable.siteID) 
1

我喜歡的方式, SQL Server允許使用deleteupdate的窗口函數。因此,也可以將這些功能用於此目的:

with todelete as (
     select s.*, min(siteId) over (partition by pageid) as mins, 
      max(siteId) over (partition by pageid) as maxs 
     from sample s 
    ) 
delete from todelete 
    where mins = maxs;