Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Deletes

Estas en el tema de Deletes en el foro de Bases de Datos General en Foros del Web. Hola buen dia a todos Necesito crear una consulta delete. Tengo mis tablas en sql status ------------ idstatus cabecera_cliente servicio La otra es: comments ------------- ...
  #1 (permalink)  
Antiguo 29/09/2010, 13:59
 
Fecha de Ingreso: agosto-2010
Mensajes: 62
Antigüedad: 13 años, 8 meses
Puntos: 0
Busqueda Deletes

Hola buen dia a todos

Necesito crear una consulta delete.

Tengo mis tablas en sql

status
------------
idstatus
cabecera_cliente
servicio

La otra es:

comments
-------------
idcomments
cabecera_cliente
notas

Como le puedo hacer para que al eliminar el id de status se elimine la id de comments donde las cabeceras_cliente sean de igual valor

Pro favor si alguien me puede ayudar

Gracias
  #2 (permalink)  
Antiguo 30/09/2010, 08:52
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Deletes

Necesitas hacer un delete en cascada primero:

Código:
delete from comments 
inner join status S on (comments.cabecera_cliente=S.cabecera_cliente)
where s.id_status=4

delete from status where id_status=4
Saludos!
  #3 (permalink)  
Antiguo 30/09/2010, 09:06
 
Fecha de Ingreso: agosto-2010
Mensajes: 62
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Deletes

hola libras gracias por tu ayuda

Mm hice como el ejemplo que pusiste claro con los valores correctos, pero no me los acepta me marca error y no se donde, ni como hacerle, estoy usando el ems sql manager
  #4 (permalink)  
Antiguo 30/09/2010, 10:37
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Deletes

Sorry un error :P

Código:
delete from comments 
where cabecera_cliente in (
select S.cabecera_cliente from status S where s.cabecera_cliente=1
)
Este es el codigo bien

Saludos!
  #5 (permalink)  
Antiguo 30/09/2010, 11:20
 
Fecha de Ingreso: agosto-2010
Mensajes: 62
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Deletes

Gracias libras me sirvio de mucho tu ejemplo

De echo si funciona y ya me elimina la cabecera del comments, pero ahora como le puedo hacer para que con ese mismo codigo tambien me borre el de status.

Mira mi codigo est asi:

Cita:
mysql_query("Delete from tblcommentstatus where cabecera_cliente in (select tblstatusservices.cabecera_cliente from tblstatusservices where tblstatusservices.idstatusdeservicios='".$_POST[select]."')");
?>
Ahi ya lo tengo en php pero practicamnete es la consulta que me hiciste, pero como ves solo me elimina un valor como le hago para que me elimine tambien el id de status que tiene la misma cabecera.

Gracias por tu ayuda
  #6 (permalink)  
Antiguo 30/09/2010, 12:10
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Deletes

No puedes eliminar en una sola consulta 2 tablas tienes que hacer el delete de una y despues el de la otra, una vez que haces ese delete ahora tienes que hacer el siguiente:

Código:
delete from status where id_status=4
Saludos!
  #7 (permalink)  
Antiguo 30/09/2010, 13:25
 
Fecha de Ingreso: agosto-2010
Mensajes: 62
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: Deletes

Siip ya lo habia hecho jeje y pues muchas gracias por tu ayuda me fue de gran utilidad ya me salio lo que quería.

Saludos
  #8 (permalink)  
Antiguo 30/09/2010, 15:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Deletes

Cita:
No puedes eliminar en una sola consulta 2 tablas tienes que hacer el delete de una y despues el de la otra, una vez que haces ese delete ahora tienes que hacer el siguiente:
Es no es necesariamente cierto. No sé si mencionas alguna restricción específica de algún DBMS, pero en el caso de MySQL sería
Código MySQL:
Ver original
  1. DELETE FROM tblcommentstatus  CS INNER JOIN tblstatusservices SS on CS.cabecera_cliente = SS.cabecera_cliente
  2. WHERE SS.idstatusdeservicios = valorBuscado;

Para estas dudas siempre es mejor consultar el manual de referencia:
Cita:
Para la primera sintaxis, sólo los registros coincidentes de las tablas listadas antes de la cláusula FROM se borran.
Para la segunda sintaxis, sólo los registros coincidentes de las tablas listadas en la cláusula FROM (antes de la cláusula USING ) se borran. El efecto es que puede borrar registros para varias tablas al mismo tiempo y tienen tablas adicionales que se usan para buscar:
Código MySQL:
Ver original
  1. DELETE t1, t2 FROM t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id;
O:
Código MySQL:
Ver original
  1. DELETE FROM t1, t2 USING t1, t2, t3 WHERE t1.id=t2.id AND t2.id=t3.id;
Estos comandos usan las tres tablas al buscar registros a borrar, pero borrar los registros coincidentes sólo para las tablas t1 y t2.

Los ejemplos anteriores muestran inner joins usando el operador coma, pero comandos DELETE de varias tablas pueden usar cualquier tipo de join permitido por comandos SELECT tales como LEFT JOIN.
Siempre hay que tener en cuenta que si hay FOREEIGN KEYs, la cosa cambia un poco:
Cita:
Si usa un comando DELETE de varias tablas incluyendo tablas InnoDB para las que hay restricciones de clave foránea, el optimizador MySQL puede procesar tablas en un orden ditinto del de su relación padre/hijo. En este caso, el comando falla y se deshace. En su lugar, debe borrar de una tabla úncia y confiar en la capacidad de ON DELETE que proporciona InnoDB para hacer que las otras tablas se modifiquen correctamente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 01/10/2010, 08:03
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Deletes

Muchas gracias por la informacion, habia buscado algo sobre SQL server y segun yo decia que no se podian eliminar informacion de 2 tablas en un solo delete :)

Etiquetas: bases-de-datos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:19.