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

[SOLUCIONADO] DUDA tablas N/M

Estas en el tema de DUDA tablas N/M en el foro de Mysql en Foros del Web. Tengo tres tablas: COLOR (idcolor, nombre) CARTA (idcarta,nombre) CARTA_HAS_COLOR (idcarta,idcolor) CARTA_HAS_COLOR relaciona cada carta con sus colores. Si quisiese hacer una consulta para obtener las ...
  #1 (permalink)  
Antiguo 06/10/2015, 05:23
 
Fecha de Ingreso: julio-2015
Mensajes: 25
Antigüedad: 8 años, 9 meses
Puntos: 0
DUDA tablas N/M

Tengo tres tablas:

COLOR (idcolor, nombre)
CARTA (idcarta,nombre)
CARTA_HAS_COLOR (idcarta,idcolor)

CARTA_HAS_COLOR relaciona cada carta con sus colores.

Si quisiese hacer una consulta para obtener las cartas con los colores 1 y 3 por ejemplo. ¿Como lo haria?

He probado con

Código SQL:
Ver original
  1. SELECT c.nombre, chc.color_idcolor
  2. FROM carta AS c
  3. LEFT JOIN carta_has_color chc ON chc.carta_idcarta=c.idcarta
  4. WHERE chc.color_idcolor=1 AND chc.color_idcolor=3
  5. ORDER BY c.nombre


Pero no devuelve nada. ¿Podeis ayudarme?

Última edición por gnzsoloyo; 06/10/2015 a las 05:42
  #2 (permalink)  
Antiguo 06/10/2015, 05:43
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: DUDA tablas N/M

No te devuelve nada porque en un mismo registro idcolor no puede tener dos valores diferentes... tan simple como eso.
Código SQL:
Ver original
  1. SELECT c.nombre, chc.color_idcolor
  2. FROM carta AS c
  3. LEFT JOIN carta_has_color chc ON chc.carta_idcarta=c.idcarta
  4. WHERE chc.color_idcolor IN(1, 3);
  5. ORDER BY c.nombre
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 06/10/2015, 05:51
 
Fecha de Ingreso: julio-2015
Mensajes: 25
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: DUDA tablas N/M

Pero eso esta mal, en ese caso me mostrará las que son del 1 y del 3 pero también las que son solo del 1 o del 3.
Yo lo que quiero es que me saque las que son del 1 y del 3 concretamente , osea que si una carta es del color 1 solamente no debería de salir.
  #4 (permalink)  
Antiguo 06/10/2015, 06:14
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: DUDA tablas N/M

No está mal. No te explicaste claramente en el primer post...
Cita:
Si quisiese hacer una consulta para obtener las cartas con los colores 1 y 3 por ejemplo. ¿Como lo haria?
En ninguna parte dices que sea exclusivamente esos dos en la misma carta.
Si lo que quieres es obtener las cartas donde estén ambos colores, no es tan complejo.


Código MySQL:
Ver original
  1. SELECT c.nombre, chc.color_idcolor
  2. FROM carta AS c
  3. INNER JOIN carta_has_color chc ON chc.carta_idcarta=c.idcarta
  4. WHERE c.idcarta IN(
  5.   SELECT c.idcarta
  6.   FROM carta AS c
  7.   INNER JOIN carta_has_color chc ON chc.carta_idcarta=c.idcarta
  8.   WHERE chc.color_idcolor IN(1, 3)
  9.   GROUP BY c.idcarta
  10.   HAVING COUNT(*) = 2)
  11. ORDER BY c.nombre;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 07/10/2015, 02:14
 
Fecha de Ingreso: julio-2015
Mensajes: 25
Antigüedad: 8 años, 9 meses
Puntos: 0
De acuerdo Respuesta: DUDA tablas N/M

Gracias, funciona a la perfección

Etiquetas: 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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 20:48.