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

ayuda en consulta

Estas en el tema de ayuda en consulta en el foro de Mysql en Foros del Web. Buenas a todos Tengo la siguientes tablas: Tabla DISCOTECA Código: create table DISCOTECA ( NIT_DISCO char(6) not null, NOM_DISCO varchar(60), DIR_DISCO varchar(60), CAP_DISCO int, VAL_ENT_DISCO ...
  #1 (permalink)  
Antiguo 08/05/2010, 10:28
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
De acuerdo ayuda en consulta

Buenas a todos

Tengo la siguientes tablas:

Tabla DISCOTECA

Código:
create table DISCOTECA
(
   NIT_DISCO            char(6) not null,
   NOM_DISCO            varchar(60),
   DIR_DISCO            varchar(60),
   CAP_DISCO            int,
   VAL_ENT_DISCO        float(6),
   primary key (NIT_DISCO)
);
Tabla ALBUM

Código:
create table ALBUM
(
   COD_ALB              char(5) not null,
   NOM_ALB              char(40),
   FEC_ALB              date,
   NUM_CAN_ALB          int,
   VAL_ALB              float(10),
   primary key (COD_ALB)
);
Y de su relacion mucho a muchos genero la tabla
ALBUMES_DE_DISCOTECA
Código:
create table ALBUMES_DE_DISCOTECA
(
   NIT_DISCO            char(6) not null,
   COD_ALB              char(5) not null,
   primary key (NIT_DISCO, COD_ALB)
);
La consulta que quiero realizar es:
Mostrar el numero de albumes de una discoteca especifica, mostrando el nombre de la discoteca, su numero de albumes y el nombre de dichos albumes

Yo realice una consulta con el siguiente codigo:
Cita:
SELECT d.nom_disco "DISCOTECA", count(ad.cod_alb) "NUMERO DE ALBUMES", group_concat(a.nom_alb separator " - ") "NOMBRE ALBUMES" FROM (discoteca d INNER JOIN albumes_de_discoteca ad USING (nit_disco)) INNER JOIN album a USING (cod_alb) GROUP BY ad.nit_disco ORDER BY count(ad.cod_alb) desc limit 1
Con esta consulta me muestra la discoteca con el mayor numero de albumes y sus respectivos nombres, mi duda es: si yo quiero especificar una discoteca en particular puedo colocar un where diciendo por ejemplo:

Cita:
SELECT d.nom_disco "DISCOTECA", count(ad.cod_alb) "NUMERO DE ALBUMES", group_concat(a.nom_alb separator " - ") "NOMBRE ALBUMES" FROM (discoteca d INNER JOIN albumes_de_discoteca ad USING (nit_disco)) INNER JOIN album a USING (cod_alb) GROUP BY ad.nit_disco WHERE d.nom_disco= "La Zona"
Es decir especificar el codigo de la discoteca en la consulta o el nombre

lo hice asi pero me genera error

si se puede hacer esta consulta??
  #2 (permalink)  
Antiguo 08/05/2010, 15:07
 
Fecha de Ingreso: mayo-2006
Ubicación: Bogotá
Mensajes: 2.061
Antigüedad: 17 años, 11 meses
Puntos: 50
Respuesta: ayuda en consulta

la condicion se coloca en el inner join donde invoca a la tabla a la que pertenece el campo y no se hace con where sino con on.

Creo que deberia quear algo parecido a esto


SELECT d.nom_disco "DISCOTECA", count(ad.cod_alb) "NUMERO DE ALBUMES", group_concat(a.nom_alb separator " - ") "NOMBRE ALBUMES" FROM (discoteca d INNER JOIN albumes_de_discoteca ad on d.nom_disco= "La Zona" USING (nit_disco)) INNER JOIN album a USING (cod_alb) GROUP BY ad.nit_disco
  #3 (permalink)  
Antiguo 08/05/2010, 16:22
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: ayuda en consulta

Vamos a hacer una aclaración sobre lo que dice helacer:
1) El problema de sintaxis se produce porque no respetas el orden de las cláusulas. Toda cláusula modificatoria, de ordenamiento, filtrado o límite van siempre después del WHERE. Siempre.
2) La condición puede ponerse en el WHERE y no necesariamente en el FROM, aunque hacerlo en el FROM es efectivo si tienes un índice definido sobre el campo "nom_disco"; caso contrario el resultado puede ser el mismo que hacerlo en el WHERE.
3) Lo que necesariamente debe ir en el FROM es la vinculación entre tablas.
En tu caso la sentencia podría tomar dos formas:
Código MySQL:
Ver original
  1.     d.nom_disco "DISCOTECA",
  2.     count(ad.cod_alb) "NUMERO DE ALBUMES",
  3.     group_concat(a.nom_alb separator " - ") "NOMBRE ALBUMES"
  4.     discoteca d INNER JOIN
  5.     albumes_de_discoteca ad  USING (nit_disco) INNER JOIN
  6.     album a USING (cod_alb) ON d.nom_disco= "La Zona"
  7. GROUP BY ad.nit_disco
Código MySQL:
Ver original
  1.     d.nom_disco "DISCOTECA",
  2.     count(ad.cod_alb) "NUMERO DE ALBUMES",
  3.     group_concat(a.nom_alb separator " - ") "NOMBRE ALBUMES"
  4.     discoteca d INNER JOIN
  5.     albumes_de_discoteca ad  USING (nit_disco) INNER JOIN
  6.     album a USING (cod_alb)
  7. WHERE d.nom_disco= "La Zona"
  8. GROUP BY ad.nit_disco
En definitiva la diferencia entre ambos es una cuestión de índices y performance.
__________________
¿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 08/05/2010, 16:50
 
Fecha de Ingreso: abril-2009
Ubicación: Colombia
Mensajes: 949
Antigüedad: 15 años
Puntos: 27
Respuesta: ayuda en consulta

Muchas Gracias....

Etiquetas: Ninguno
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 00:25.