2011-11-17 19 views
5

Estoy creando un menú y submenús en una variable de tabla. (Registros típicos de hijo principal en la misma tabla) ParentID coll es nulo para todos los menús principales. Y para su hijo ParentID será el MenuId de estos menús principales. (Dependiendo de qué tipo de registros de usuario es build) Ahora lo que tengo que hacer es si un padre particular no tiene ningún hijo. Quiero eliminar esta repetición primaria de esta variable de tabla.
Sé que puedo con el cursor o por la operación fila por fila. ¿Puedo hacerlo de otra manera?Eliminar el registro principal si el hijo no está presente

+0

¿Quieres hacer esto como un trabajo de mantenimiento (es decir, una vez), o como una ocurrencia regular, cada vez que un niño se borra? – Oded

Respuesta

3

Sin ver su estructura de tabla que es difícil decir que la consulta exacta que se necesita, pero, si he entendido bien su pregunta, sólo tiene que hacer algo como esto:

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

Esta consulta hace una subconsulta correlacionada para encontrar todos los registros del menú que no tienen registros secundarios. Se utiliza la cláusula de SQL EXISTS

1

Se podría hacer algo como esto:

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

Un solo estado como este debería hacerlo (como existe una alternativa al uso):

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 
Cuestiones relacionadas