2011-11-17 28 views
5

Tôi đang tạo menu và menu con trong một biến bảng. (Các bản ghi con chính của phụ huynh trong cùng một bảng) Giá trị ParentID coll là null cho tất cả các menu trên cùng. Và cho con của họ ParentID sẽ là MenuId của các menu cha. (Tùy thuộc vào loại nhật ký người dùng nào được xây dựng này) Bây giờ những gì tôi phải làm là nếu cha mẹ cụ thể không có bất kỳ con nào tôi muốn xóa phụ huynh này recrod từ biến bảng này.
Tôi biết tôi có thể sử dụng nó bằng con trỏ hoặc theo hàng hoạt động. Tôi có thể làm điều đó theo bất kỳ cách nào khác không?Xóa hồ sơ gốc nếu trẻ không có mặt

+0

Bạn có muốn làm điều này như một công việc bảo dưỡng (tức là một lần), hoặc là một thường xuyên xảy ra, bất cứ khi nào một đứa trẻ bị xóa? – Oded

Trả lời

3

Nếu không nhìn thấy cấu trúc bảng của bạn thật khó để cho bạn biết truy vấn chính xác mà bạn sẽ cần nhưng, nếu tôi hiểu câu hỏi của bạn một cách chính xác, bạn chỉ cần làm một cái gì đó như này:

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

Truy vấn con này sẽ tìm ra tất cả các bản ghi trình đơn không có hồ sơ con. Nó sử dụng EXISTS khoản SQL của

1

Bạn có thể làm một cái gì đó như thế này:

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

Một tuyên bố đơn như thế này nên làm điều đó (như là một thay thế cho sử dụng tồn tại):

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 
Các vấn đề liên quan