MySQL - Comparación contra subconsulta MySQL que devuelve varios valores de tipo cadena

 
Vista:

Comparación contra subconsulta MySQL que devuelve varios valores de tipo cadena

Publicado por Optigan (2 intervenciones) el 07/02/2019 23:37:07
Dada una BBDD de grupos musicales, me gustaría saber cómo mostrar todas las bandas que tengan al menos los subestilos de otra en concreto; he intentado algo así:

1
2
3
4
5
SELECT nombre_autor
       FROM autores NATURAL JOIN publican NATURAL JOIN discos NATURAL JOIN relacionados NATURAL JOIN subestilos
       WHERE nombre_subestilo = ALL (SELECT DISTINCT nombre_subestilo
            FROM subestilos NATURAL JOIN relacionados NATURAL JOIN discos NATURAL JOIN publican NATURAL JOIN autores
            WHERE nombre_autor = 'Eels');

Pero sólo parece funcionar en caso de que la subconsulta devuelva un solo resultado; en el caso de Eels, que tiene dos subestilos asociados (dos que son bastante habituales, "Alternative Rock" e "Indie Rock", y que comparten varias otros grupos de mi BBDD, por lo que serían esperables resultados), no devuelve nada.

¿Sería necesario programar un cursor? En general, me estoy estrellando contra este tipo de consultas que buscan establecer comparaciones con grupos de resultados (aunque sea simplemente buscar qué bandas comparten el subestilo X y el Y); supongo que es un error de base.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 201
Bronce
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Comparación contra subconsulta MySQL que devuelve varios valores de tipo cadena

Publicado por Rafael (97 intervenciones) el 08/02/2019 08:50:31
Hola:

A ver encuentro muchas cosas ...

1. No nos dices como es la estructura de tus tablas con lo cual es imposible saber si al establecer las relaciones entre ellas, estas son o no correctas....

2. ESTO NO ES UNA OBLIGACION, pero si es conveniente que en lugar de enviar todo el query en modo CHORIZO, lo envies unpoco formateado para que sea mas leible y se te pueda ayudar de mejor modo... ejemplo
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT nombre_autor
FROM   autores
       NATURAL JOIN publican
       NATURAL JOIN discos
       NATURAL JOIN relacionados
       NATURAL JOIN subestilos
WHERE  nombre_subestilo = ALL (SELECT DISTINCT nombre_subestilo
               FROM   subestilos
                      NATURAL JOIN relacionados
                      NATURAL JOIN discos
                      NATURAL JOIN publican
                      NATURAL JOIN autores
               WHERE  nombre_autor = 'Eels');
Ves que no solo se ve mas bonito ... si no que se puede entender mejor ?

3. Al no saber la estructura de las tablas NO se puede saber como se relacionan entre si y menos si usas NATURAL JOIN ....

Si cuentas un poco estas cosas ... seguro entre todos encontramos que pasa....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 2
Ha aumentado su posición en 35 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Comparación contra subconsulta MySQL que devuelve varios valores de tipo cadena

Publicado por Optigan (1 intervención) el 08/02/2019 19:54:34
Las relaciones son correctas -como he dicho, si la subconsulta devuelve un solo resultado, la consulta funciona- y uso NATURAL JOIN porque el nombre de las PK es inequívoco e igual entre tablas relacionadas.

Lamento que el formato no fuera de tu gusto; intenté poner cada término clave de SQL en un nivel distinto. La subconsulta estaba mejor formateada pero la web me jugó una mala pasada al transcribirla.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar