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

Duda sobre secuencia SQL

Estas en el tema de Duda sobre secuencia SQL en el foro de Bases de Datos General en Foros del Web. Buenas :) Estoy manejando una Base de Datos Mysql y más o menos me apaño con la mayoría de cosas más habituales, pero ahora me ...
  #1 (permalink)  
Antiguo 28/01/2015, 19:02
 
Fecha de Ingreso: septiembre-2003
Ubicación: Barcelona
Mensajes: 7
Antigüedad: 21 años, 2 meses
Puntos: 0
Duda sobre secuencia SQL

Buenas :)

Estoy manejando una Base de Datos Mysql y más o menos me apaño con la mayoría de cosas más habituales, pero ahora me viene una duda y estoy segura que debe existir una secuencia sql que me facilite la tarea que debo hacer.

Verán, tengo dos tablas.

Una se llama Coches y se vería así:

Matrícula | Marca | Modelo | Revisión

La otra tabla se llama Alquileres y se vería así:

Matrícula | Alquilado |Cliente

Bien, en la tabla Coches tengo todos los coches comprados por la empresa y en la tabla Alquileres, los que están siendo alquilados por un cliente en estos momentos.
Ahora bien, lo que yo quisiera hacer es una secuencia SQL con la que automáticamente pueda borrar de la tabla Coches los coches que están listados en la tabla de Alquileres, por ejemplo seleccionando la Matrícula, que es un dato que está igual en ambas tablas.

Sé que debería ser alguna secuencia del tipo DELETE FROM `Coches` WHERE... y no sé bien qué colocar en este punto, sabría hacer la scuencia si es cada Matrícula una a una individual, pero seguro que debe existir forma de que una sola secuencia SQL pueda decirle "borrame todos los coches de la tabla Coches donde exista su matrícula en la celda Matrícula de la tabla Alquileres".

He estado buscando por internet y no sé si sería algo así:

Código MySQL:
Ver original
  1. DELETE FROM `Coches` WHERE `Matricula` IN (SELECT `Matricula` FROM `Alquileres`);

Espero haberme explicado >_<

Si alguien me lo puede aclarar o confirmar, antes de que haga algún estropcicio a la Base de Datos xD

¡Un saludo!
  #2 (permalink)  
Antiguo 29/01/2015, 03:03
 
Fecha de Ingreso: enero-2008
Ubicación: Málaga - España
Mensajes: 346
Antigüedad: 16 años, 10 meses
Puntos: 13
Respuesta: Duda sobre secuencia SQL

Aqui podemos tener un error de diseño.....

Pregunta:
¿Que pasa con los coches cuando dejan de estar alquilados?
¿Deben volver a la tabla coches?


Haz copia previa de las tablas antes de borrar nada :D
  #3 (permalink)  
Antiguo 29/01/2015, 10:44
 
Fecha de Ingreso: septiembre-2003
Ubicación: Barcelona
Mensajes: 7
Antigüedad: 21 años, 2 meses
Puntos: 0
Respuesta: Duda sobre secuencia SQL

Cita:
Iniciado por alpe2000 Ver Mensaje
Aqui podemos tener un error de diseño.....

Pregunta:
¿Que pasa con los coches cuando dejan de estar alquilados?
¿Deben volver a la tabla coches?


Haz copia previa de las tablas antes de borrar nada :D
Descuida las tablas y demás que he colocado ahí no son reales, es un ejemplo para poder plantear la explicación de la secuencia que estoy buscando.

Lo que me interesa saber es cual sería la secuencia para borrar rápidamente registros de una tabla, tomando de referencia de la otra tabla.

Es decir, en la Tabla A y Tabla B, hay una columna en ambas que coincide datos pongamos la columna "ID" de estos datos. Yo quiero saber qué secuencia me permite de forma rápida que busque las "ID" listadas en la Tabla B y que las elimine de la Tabla A.

Por eso plantee lo de los coches y matrículas xD Y no sé si la secuencia que yo he puesto ahí es correcta o se debería usar algo distinto.
  #4 (permalink)  
Antiguo 30/01/2015, 09:41
 
Fecha de Ingreso: septiembre-2003
Ubicación: Barcelona
Mensajes: 7
Antigüedad: 21 años, 2 meses
Puntos: 0
Respuesta: Duda sobre secuencia SQL

¿Alguien puede decirme si es correcta esa secuencia SQL que plantee o se usaría otra cosa?
  #5 (permalink)  
Antiguo 30/01/2015, 09:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Duda sobre secuencia SQL

Lo que te podemos decir son algunas cosas:
Cita:
Descuida las tablas y demás que he colocado ahí no son reales, es un ejemplo para poder plantear la explicación de la secuencia que estoy buscando.
Si no pones los casos reales, es altamente probable que la solución que planteamos no sirva, entre otras cosas porque la lógica en SQL es muy específica en relación a los escenarios.
Dos bases idénticas, con iguales datos, en dos sistemas de metas diferentes pueden requerir consultas distintas e incompatibles.

Postea los casos reales.

Cita:
Lo que me interesa saber es cual sería la secuencia para borrar rápidamente registros de una tabla, tomando de referencia de la otra tabla.
En ocasiones depende del DBMS. Peo si el tema es que tienes varias tablas intencionalmente dependientes, la regla suele ser simple: Se borran en orden inverso de inserción.
Cita:
Es decir, en la Tabla A y Tabla B, hay una columna en ambas que coincide datos pongamos la columna "ID" de estos datos. Yo quiero saber qué secuencia me permite de forma rápida que busque las "ID" listadas en la Tabla B y que las elimine de la Tabla A.
Tablas con dependencia de FK, no se borran en la misma secuencia de dependencia en todos los DBMS, cuando usas JOINs. Dependerá de cual uses si funciona o no.

Ocasionalmente puede ser buena idea usar borrados de cascada (clausulas ON DELETE CASCADE), presentes en todos los DBMS que poseen restricciones de clave foránea (los hay que no la tienen).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: ejemplo, mysql, secuencia, sql, 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 11:43.