2011-11-17 49 views
5

我在表變量中創建菜單和子菜單。 (同一個表中的典型父母子記錄) 對於所有頂層菜單,ParentID coll爲空。對於他們的孩子,ParentID將是這些父菜單的MenuId。 (取決於這是什麼樣的用戶日誌構建) 現在我要做的是如果特定的父母沒有任何孩子我想從這個表變量刪除這個父母recrod。
我知道我可以用遊標或按行操作。我能以其他方式做到嗎?刪除父記錄如果孩子不存在

+0

你想這樣做,因爲維護作業(即一次),或作爲經常發生,每當一個孩子被刪除? – Oded

回答

3

沒有看到你的表結構很難告訴你確切的查詢你需要,但如果我正確地理解你的問題,你只需要像做這個:

DELETE T 
FROM MyTable T 
WHERE NOT EXISTS(SELECT * FROM MyTable WHERE ParentID = T.MenuID) 
    AND T.ParentID IS NULL 

該查詢執行相關子查詢來查找所有沒有子記錄的菜單記錄。它使用SQL的EXISTS條款

1

你可以做這樣的事情:

delete from yourtable yt where not exists (select * from yourtable yt2 where yt.id = yt2.parentid) and yt.parentid is null 
4

(如使用替代存在)像這樣的單個語句應該這樣做:

delete p 
from 
    tblMenu p 
    left join tblMenu c on p.ID = c.ParentID 
where 
    p.ParentID is null --Ensures that the item to delete is at the top 
    and c.ParentID is null --Finds top level items with no children