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

[SOLUCIONADO] Sobre delete entre dos tablas.

Estas en el tema de Sobre delete entre dos tablas. en el foro de Mysql en Foros del Web. Hola a todos, Me piden en un ejercicio que borre a unas personas de una tabla "personas" y siempre que su club sea "Real Madrid". ...
  #1 (permalink)  
Antiguo 23/11/2013, 05:48
 
Fecha de Ingreso: noviembre-2013
Ubicación: Barcelona
Mensajes: 33
Antigüedad: 10 años, 5 meses
Puntos: 0
Sobre delete entre dos tablas.

Hola a todos,

Me piden en un ejercicio que borre a unas personas de una tabla "personas" y siempre que su club sea "Real Madrid".

persona (cod p,nombre,apellidos,dirección,telefono,codClub) on codClub REF. club
club (codClub,nomclub,nomsoc)

En el campo "nomclub" de club esta el equipo realmadrid que corresponde con el codClub "5".
En la tabla "persona" hay dos personas con el valor 5 en la columna "codClub".

He provado en hacer delete from persona where club.nomClub='Real Madrid';
Pero no ha hecho nada, tambien probe en hacerlo de otra manera que no recuerdo y me carge toda la tabla, por lo que tuve que rehacerla.

Estoy mirando en google pero no encuentro la forma de hacerlo.

Alguien podria decirme como se haría? Agradeceria tambien (si es posible) una explicación para saber el funcionamiento.

Muchas gracias,
Jose Luis,
  #2 (permalink)  
Antiguo 23/11/2013, 06:02
Colaborador
 
Fecha de Ingreso: septiembre-2013
Ubicación: España
Mensajes: 3.648
Antigüedad: 10 años, 7 meses
Puntos: 578
Respuesta: Sobre delete entre dos tablas.

Cita:
club (codClub,nomclub,nomsoc)
Cita:
delete from persona where club.nomClub='Real Madrid';
Cuidado con la mayúscula!
  #3 (permalink)  
Antiguo 23/11/2013, 06:11
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, 4 meses
Puntos: 2658
Respuesta: Sobre delete entre dos tablas.

Es un problema muy, pero muy básico. Resulta difícil entender por qué te puede causar problemas.
Planteemos la cosa de dos formas:
1) Si ya conoces el código de ese club, sólo necesitas indicar eso:
Código MySQL:
Ver original
  1. DELETE FROM persona
  2. WHERE codClub = 5
Es obvio que, de acuerdo a la descripcion que pones en el post de esa tabla, no puedes consultar por el nombre del equipo, por cuanto éste está en otra tabla.

2) Usando el nombre, hay dos modos.
a) Con una subconsulta:
Código MySQL:
Ver original
  1. DELETE FROM persona
  2. WHERE codClub IN(SELECT codClub FROM club WHERE nomClub = 'Real Madrid');
b) Con un JOIN:
Código MySQL:
Ver original
  1. DELETE p FROM persona p INNER JOIN club c ON p.codClub = c.codClub
  2. WHERE c.nomClub = 'Real Madrid');

Personalmente me quedaría con la primera de estas dos formas, porque es más entendible y segura.

PD: Esto lo puedes ver claramente en el manual de referencia. Úsalo. Es lo que hacemos todos, incluyendo a quienes tenemos años de experiencia, porque nadie se pone a memorizar todo.

http://dev.mysql.com/doc/refman/5.0/...ipulation.html

En cuanto a lo que te comenta @PHPeros, eso tiene impacto si y sólo si usas MySQL instalado sobre Linux. Pero no tiene ningún efecto en Windows, así que dependerá del caso.
De todos modos es muy buena práctica usar puras minúsculas siempre para todo objeto de base de datos. Te ahorras problemas de dificil detección.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 23/11/2013, 09:12
 
Fecha de Ingreso: noviembre-2013
Ubicación: Barcelona
Mensajes: 33
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Sobre delete entre dos tablas.

Muchisimas gracias a los dos,

gnzsoloyo esto es lo que necesito, respuestas y el porque.

He utilizado la segunda opcion:

DELETE FROM persona
WHERE codClub IN(SELECT codClub FROM club WHERE nomClub = 'Real Madrid');

Es la que necesitaba, la primera daria lo mismo, pero me piden expresamente que lo busque por 'Real Madrid'

Por desgracia estuve mirando en el manual de referencia (13.2.1. Sintaxis de DELETE) y no me saco la duda.

Muchas gracias de nuevo,
Jose Luis,

Etiquetas: campo, delete, tabla
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 15:42.