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

Consultas a varias tablas

Estas en el tema de Consultas a varias tablas en el foro de Mysql en Foros del Web. Hola a tod@s les cuento un poco cual es mi problema (Voy a poner un caso de ejemplo para explicar lo que me sucede). Es ...
  #1 (permalink)  
Antiguo 18/05/2014, 16:11
 
Fecha de Ingreso: mayo-2014
Ubicación: Madrid
Mensajes: 3
Antigüedad: 9 años, 11 meses
Puntos: 0
Consultas a varias tablas

Hola a tod@s les cuento un poco cual es mi problema (Voy a poner un caso de ejemplo para explicar lo que me sucede).

Es mi primer post y todavía no se muy bien como funciona esto, ahora mismo no he conseguido subir imagenes mas adelante investigare como hacerlo

Bien comencemos tenemos esta estructura de la base de datos

Nombre de las tablas:(quería subir un par de imágenes pero no encuentro como, asi que dejo el enlace)

Cliente
http://gyazo.com/a4d4faa75f8d84434f49a0d8f07f10e6
CuentaTarjeta
http://gyazo.com/9e20eae75a5831bf842254aae7fb9235
HMovimientos
http://gyazo.com/26222b9527f0ff91bf714489159d2f47
CuentaTarjeta2
http://gyazo.com/32bb71044755d0b410477c67b8193f62
PerosonasAutorizadas
http://gyazo.com/aab81c526f8fb90438b463e7b81536c3
Cuenta
http://gyazo.com/4c2a124a5fb75a1b2a4262b681bc1401
Tarjeta
http://gyazo.com/95db214bd268c59a5e2d5bf3ebd8b9a2

Bien cuento un poco las relaciones que tienen cada tabla con las respectivas
(-> es para indicar que esta relacionada con una tabla)


Cliente -> No se relaciona con ninguna
CuentaTarjeta -> No se relaciona con ninguna
CuentaTarjeta2 -> Cliente
CuentaTarjeta2 -> CuentaTarjeta
Cuenta -> CuentaTarjeta
Tarjeta -> CuentaTarjeta
HMovimientos -> CuentaTarjeta
PersonasAutorizadas -> CuentaTarjeta

*Cuenta y Tarjeta, pertenece a un ISA con CuentaTarjeta:



Si necesitáis algún dato mas lo puede facilitar ya que es un trabajo para clase y no pasa nada.

Bien he aquí mi consulta

Del Cliente que vive en la direccion C/Candy 88 saqueme el titular y el iban de la cuenta, que personas tiene autorizadas, que tipo de cuenta es y que tipo de tarjetas tiene (En otras palabras que me saque de la tabla Cliente todos los Campos, de la tabla CuentaTarjeta el campo IBAN y Titular, de la tabla PersoanasAutorizadas Nombre, de la tabla Tarjeta el Tipo, y de la tabla Cuenta la categoría).

Esta es mi consulta la cual me saca lo que quiero pero me duplica los datos:

SELECT DISTINCT * FROM (SELECT * FROM Cliente WHERE Direccion = "C/Candy 88") Cliente, (SELECT IBAN, Titular FROM CuentaTarjeta WHERE IBAN = ANY (SELECT IBANCuentaTarjeta FROM CuentaTarjeta2 WHERE DNICliente = (SELECT DNI FROM Cliente WHERE Direccion = "C/Candy 88"))) CuentaTarjeta, (SELECT Nombre FROM PersonasAutorizadas WHERE IBANCuentaTarjeta = ANY (SELECT IBANCuentaTarjeta FROM CuentaTarjeta2 WHERE DNICLiente = (SELECT DNI FROM Cliente WHERE Direccion = "C/Candy 88"))) PersonasAutorizadas, (SELECT Categoria FROM Cuenta WHERE IBANCuentaTarjeta = ANY (SELECT IBANCuentaTarjeta FROM CuentaTarjeta2 WHERE DNICLiente = (SELECT DNI FROM Cliente WHERE Direccion = "C/Candy 88")))Cuenta, (SELECT Tipo, FCaducidad FROM Tarjeta WHERE IBANCuentaTarjeta = ANY (SELECT DISTINCT IBANCuentaTarjeta FROM CuentaTarjeta2 WHERE DNICLiente = (SELECT DISTINCT DNI FROM Cliente WHERE Direccion = "C/Candy 88")))Tarjeta;

Resultado:

http://gyazo.com/6d28db7b260c8246a137db4a1ca8fa37

Ya probe con DISNTICNT , JOIN, NATURAL JOIN, UNION CON INNER JOIN, etc..... y la verdad que me quede sin ideas y si la consulta la hago de 2 en 2 tablas no hay problema el problema es que cuando en vez de dos tablas intento sacar datos de 3 o mas.

La pregunta es ¿Se Puede sacar Datos de varias tablas a la vez sin que te duplique los resultados?

Un Saludo Muchas Gracias por la ayuda de antemano, espero sus repuestas
  #2 (permalink)  
Antiguo 19/05/2014, 02:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consultas a varias tablas

Cita:
Si necesitáis algún dato mas lo puede facilitar ya que es un trabajo para clase y no pasa nada.
Pues si pasa no hacemos trabjos de clase.


Esto es lo que propones

Código MySQL:
Ver original
  1.       FROM Cliente WHERE Direccion = "C/Candy 88") Cliente,
  2.      (SELECT IBAN, Titular
  3.       FROM CuentaTarjeta
  4.       WHERE IBAN = ANY (SELECT IBANCuentaTarjeta
  5.                         FROM CuentaTarjeta2
  6.                         WHERE DNICliente = (SELECT DNI
  7.                                             FROM Cliente
  8.                                             WHERE Direccion = "C/Candy 88"))) CuentaTarjeta,
  9.     (SELECT Nombre
  10.     FROM PersonasAutorizadas
  11.     WHERE IBANCuentaTarjeta = ANY (SELECT IBANCuentaTarjeta
  12.                                    FROM CuentaTarjeta2
  13.                                    WHERE DNICLiente = (SELECT DNI
  14.                                                        FROM Cliente
  15.                                                        WHERE Direccion = "C/Candy 88"))) PersonasAutorizadas,
  16.     (SELECT Categoria
  17.            FROM Cuenta
  18.            WHERE IBANCuentaTarjeta = ANY (SELECT IBANCuentaTarjeta
  19.                                           FROM CuentaTarjeta2
  20.                                           WHERE DNICLiente = (SELECT DNI
  21.                                                                 FROM Cliente
  22.                                                                 WHERE Direccion = "C/Candy 88")))Cuenta,
  23.     (SELECT Tipo, FCaducidad
  24.             FROM Tarjeta
  25.             WHERE IBANCuentaTarjeta = ANY (SELECT DISTINCT IBANCuentaTarjeta
  26.                                            FROM CuentaTarjeta2
  27.                                          WHERE DNICLiente = (SELECT DISTINCT DNI
  28.                                                              FROM Cliente
  29.                                                              WHERE Direccion = "C/Candy 88")))Tarjeta;

Un par de consejos:

1.- Estudia la sintaxis de JOIN
2.- No incluyas información inutil.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 19/05/2014, 02:19
 
Fecha de Ingreso: mayo-2014
Ubicación: Madrid
Mensajes: 3
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Consultas a varias tablas

No sabia que no se podía consultar problemas que pudiéramos tener en clase, pero creo que es un problema que puede darse en la vida real pero bueno en fin..., gracias por la respuesta me mirare el join haber si me salte algo.

Un Saludo
  #4 (permalink)  
Antiguo 19/05/2014, 02:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consultas a varias tablas

No es un problema de que se pueda dar en la vida real o no. El problema es que no se hacen tareas de clase. Si se puede ayudar a hacerlas, pero siempre que se demuestre que se tiene la solución mínimamente bien enfocada, y se presente una duda concreta.

Por cierto si haces

SHOW CREATE TABLE Cliente;

veras que puedes pegar aqui el resultado y facilitarias la tarea de ayudar.

Estas seguro que el enunciado pide toda esa información en una sola query?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 19/05/2014, 08:47
 
Fecha de Ingreso: mayo-2014
Ubicación: Madrid
Mensajes: 3
Antigüedad: 9 años, 11 meses
Puntos: 0
Respuesta: Consultas a varias tablas

si estoy seguro por que es una practica en la que hay que crear la base de datos de un banco desde 0, no es un caso real la verdad por que no manejamos tanta cantidad de datos, pero si básicamente es saber si se podía hacer yo lo saque pero los resultado que me aparece en vez de aparecerme 2 me aparecen 8 y ese era mi problema que no conseguía que solo me aparecieran los 2 que quería los otros 6 restantes que me los quitara, pero seguiré leyendo info del join, como me recomendaste.

Un Saludo, y lo siento por las molestias que haya podido causar

Me hubiera quedado tal vez mas entendible si hubiera podido poner las fotos pero no se por que no me cargaba bien

Etiquetas: campo, join, select, tabla, tablas
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 14:51.