Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: flacc en 1 Julio 2013, 22:03 pm



Título: duda con join on[oracle sql 10g+] [Solucionado]
Publicado por: flacc en 1 Julio 2013, 22:03 pm
Hola chicos que tal.

Estoy algo perdido con un ejercicio de oracle sql en 10g, lo que pasa es que cuando hago una consulta con este code con el join sin comentar sale bn, pero a parte necesito mostrar datos de otras tablas, y cuando agrego mas join on se me empiezan a perder datos  :-(, y no veo que pasa.

Código
  1. SELECT
  2.  m.first_name||' '|| m.last_name AS nombre,
  3.  m.member_id AS id_miembro,
  4.  nvl2(r.act_ret_date, 'Aun no devuelto', 'Devuelto') AS estado_prestamo
  5. FROM rental r
  6.  JOIN member m ON(r.member_id=m.member_id)
  7.  --join reservation re on(re.member_id=m.member_id);

Me sale así con el join comentado:

(http://dl.dropboxusercontent.com/u/18924140/foro.elhacker.net/sin%20join%20on.png)

Y así con el join sin comentar

(http://dl.dropboxusercontent.com/u/18924140/foro.elhacker.net/con%20join%20on.png)

Aquí pongo un diagrama de las tablas, lo que se le había ocurrido a un compañero es que se podría hacer un filtro pero la verdad quede metido con el ejercicio

(http://dl.dropboxusercontent.com/u/18924140/foro.elhacker.net/tablas.jpg)

Lo siento por lo grande de las imágenes pero, pero las subí a dropbox y no se como obtener miniaturas... saludos y gracias chicos




Edit:

Hola de nuevo, entre tv y chat lo solucioné, epero creo que no con muy buenas prácticas, se podría hacer mejor por alguien mas entendido que yo, pero el punto es que funciona  :P.

El problema era que se me formaba un cartesiano, así que me valí de los distintos tipos de join para hacer que funcionara bien (o que al menos ante mis ojos funcionara bn), porque usando solo join on también se formaba un cartesiano.

Hecho en ORACLE 10G
Código
  1. SELECT
  2.  m.first_name||' '|| m.last_name AS nombre,
  3.  m.member_id AS id_miembro,
  4.  t.title AS titulo_pelicula,
  5.  nvl2(r.act_ret_date, 'Aun no devuelto', 'Devuelto') AS estado_prestamo
  6. FROM rental r
  7.  JOIN member m ON(r.member_id=m.member_id)
  8.  NATURAL JOIN title_copy
  9.  JOIN title t USING(title_id)
  10. ORDER BY nombre, titulo_pelicula;

Algunas explicaciones, aunque una vez escuché una profesora que decía que era una mala práctica usar distintos tipos de join juntos, pero no estoy seguro, si alguien pudiera aclararlo se lo agradecería.

en title copy use un natural join y en title use join using con alias t ya que como no iva a ocupar la tabla title_copy, al menos aquí no, igual el tema de memoria lo gestiona oracle, pero no se si afectará.
Captura:
(http://dl.dropboxusercontent.com/u/18924140/foro.elhacker.net/ejercicio%208%20funcionando.jpg)

Bueno chicos dejo todo esto aquí por si las moscas, quizás algún día llegue alguien mas con la misma duda que yo y esto le sirva... saludos a todos desde chile  ;D
PD: las imágenes demoran en cargar  :P


Título: Re: duda con join on[oracle sql 10g+] [Solucionado]
Publicado por: 1mpuls0 en 2 Julio 2013, 22:59 pm
Lo más seguro es que tengas que hacer un JOIN con doble condición
Código
  1. JOIN reservation re ON(re.member_id=m.member_id AND re.otrocampo=m.otrocampo);

Además de member_id las tablas reservation  y member tienen otro campo en común?.

Tal vez puedas poner la estructura de las tablas y que campos quieres mostrar.

O podrías utilizar subconsultas, creo que es más fácil.


Saludos.


Título: Re: duda con join on[oracle sql 10g+] [Solucionado]
Publicado por: flacc en 3 Julio 2013, 09:13 am
no solo member... pero gracias por la ayuda, se me paso lo del and....saludos