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

sintaxis right join

Estas en el tema de sintaxis right join en el foro de Bases de Datos General en Foros del Web. Buenas a todos, espero me puedan colaborar tengo estas tres tablas: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código sql table interprete: Ver original create table INTERPRETE (    COD_INT ...
  #1 (permalink)  
Antiguo 25/11/2009, 14:57
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
De acuerdo sintaxis right join

Buenas a todos, espero me puedan colaborar

tengo estas tres tablas:

Código sql table interprete:
Ver original
  1. create table INTERPRETE
  2. (
  3.    COD_INT              char(10) not null,
  4.    COD_CIU              char(4) not null,
  5.    NOM_PIL_INT          char(60),
  6.    NOM_REA_INT          char(70),
  7.    FEC_NAC_INT          date,
  8.    primary key (COD_INT)
  9. );

Código sql giras:
Ver original
  1. create table GIRAS_GRUPO
  2. (
  3.    COD_GRUP             char(5) not null,
  4.    COD_GIR              char(5) not null,
  5.    primary key (COD_GRUP, COD_GIR)
  6. );

Código sql giras_interprete:
Ver original
  1. create table GIRAS_INTERPRETE
  2. (
  3.    COD_INT              char(10) not null,
  4.    COD_GIR              char(5) not null,
  5.    primary key (COD_INT, COD_GIR)
  6. );

quiero traer la gira que haya sido cancelada, es decir, esa gira existe en la tabla giras, pero no esta en la tabla giras_interprete

Por medio de la siguiente sintaxis, traigo el todo el lsitado de giras y me aparece la que no tiene cantantes como NULL, pero lo que yo quiero es que solo me traiga esa gira que no tiene cantantes
aqui el codigo:

Código:
SELECT i.NOM_PIL_INT, "CANTANTE", group_concat(g.NOM_GIR separator "-") FROM (interprete i RIGTH JOIN giras_interprete gi ON i.COD_INT=gi.COD_INT) RIGHT JOIN giras g ON gi.COD_GIR=g.COD_GIR GROUP BY gi.COD_INT;
Con esta sentencia me muestra todas las giras, y tambien la gira que no tuvo cantantes, mi duda es que le debo agregar para que solo me traiga la gira que no tuvo cantantes ??

Agradezco una buena colaboracion
  #2 (permalink)  
Antiguo 25/11/2009, 15:43
Avatar de webness  
Fecha de Ingreso: enero-2009
Ubicación: BOGOTA
Mensajes: 312
Antigüedad: 15 años, 3 meses
Puntos: 5
Respuesta: sintaxis right join

EL LEFT JOIN Y EL RIGHT JOIN HACE UN PRODUCTO CARTESIANO entre 2 tablas, pero coloca NULL en los campos donde no encuentre coincidencias.

Código SQL:
Ver original
  1. SELECT *
  2. FROM    GIRAS g
  3. WHERE g.COD_GIR NOT IN (SELECT gi.COD_GIR FROM GIRAS_INTERPRETE gi)

en este caso lo que toca hacer es obtener el listado de giras de los interpretes y filtro en la tabla giras la que no esten es ese listado que es lo que tu quieres.
  #3 (permalink)  
Antiguo 25/11/2009, 16:08
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: sintaxis right join

Bueno, no exactamente un producto cartesiano.
Según los manuales lo que hace es devolver todos los registros de la tabla izquierda (LEFT) que coincidan o no con los de la tabla derecha. Al hacerlo, al no haber coincidencia en la tabla derecha los campos de esta aparecen como NULL.
Es una forma muy útil para detectar los registros de una tabla que no tienen contrapartida, como por ejemplo: clientes que NO compraron cierto artículo, que NO compraron en determinadas fechas, que NO recibieron el pedido, etc.

En ocasiones se usa para poner a cero ciertos cálculos, usando para ello la función IFNULL(), de una forma: IFNULL(campo,0), de ese modo la tabla no devuelve NULL, sino un valor interpretable, que en realidad representa cero ventas, cero pedido, etc.
Esa transformación del NULL es primordial, porque en los reportes un NULL anula todas las operaciones, que pueden estar sumando, por ejemplo, valores lícitos en casi todos los casos.

Un detalle que debes tener en cuenta es que cuando lo usas, debes asegurarte de que la tabla izquierda es la que contiene todos los valores que si existen.
Para que se entienda: Si cruzas CLIENTES con PEDIDOS, Clientes debe ser la tabla izquierda...
¿Se comprende la idea?
__________________
¿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 29/11/2009, 10:49
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: sintaxis right join

Muchas gracias por esa explicacion, muy entendible...........
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 03:27.