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

[SOLUCIONADO] Duda inner join

Estas en el tema de Duda inner join en el foro de Mysql en Foros del Web. Señores.. estoy bloqueado! Muchas horas programanado y me he quedado tieso con una chorracda que seguro que cuando alguien me responda me tiraré de los ...
  #1 (permalink)  
Antiguo 19/10/2015, 10:40
 
Fecha de Ingreso: julio-2007
Mensajes: 10
Antigüedad: 16 años, 9 meses
Puntos: 1
Duda inner join

Señores.. estoy bloqueado!
Muchas horas programanado y me he quedado tieso con una chorracda que seguro que cuando alguien me responda me tiraré de los pelos...

En fin.. ahi va!

Esta consulta debería encontrar un registro que cumple 2 condiciones dobles .. pero solo devuelve el registro cuando la condición es una y no dos:

Esta va:
select distinct (tabla1.ID), tabla1.* from tabla1
INNER JOIN tabla2
on atabla1.ID=tabla2.ID
WHERE ( (tabla2.CAMPO_A='7' AND tabla2.CAMPO_B='1') )

Pero esta no ¿?
select distinct (tabla1.ID), tabla1.* from tabla1
INNER JOIN tabla2
on atabla1.ID=tabla2.ID
WHERE ( (tabla2.CAMPO_A='7' AND tabla2.CAMPO_B='1') and (tabla2.CAMPO_A='9' AND tabla2.CAMPO_B='1') )

Si realizo el primer select (el qeu va) con la búsqueda (tabla2.CAMPO_A='9' AND tabla2.CAMPO_B='1') funciona (cumple la cosulta).. .

Por que no me devuelve los 2 registros en la segunda consulta?

Al que me los solucione le invito a una cerveza virutual!

Saludos!
  #2 (permalink)  
Antiguo 19/10/2015, 10:49
 
Fecha de Ingreso: enero-2015
Ubicación: Cordoba, Andalucía
Mensajes: 111
Antigüedad: 9 años, 3 meses
Puntos: 15
Respuesta: Duda inner join

Cita:
Iniciado por elfonario Ver Mensaje
WHERE ( (tabla2.CAMPO_A='7' AND tabla2.CAMPO_B='1') and (tabla2.CAMPO_A='9' AND tabla2.CAMPO_B='1') )
WHERE ( (tabla2.CAMPO_A='7' AND tabla2.CAMPO_B='1') OR (tabla2.CAMPO_A='9' AND tabla2.CAMPO_B='1') )

Cita:
Iniciado por elfonario Ver Mensaje
Al que me los solucione le invito a una cerveza virutual!
  #3 (permalink)  
Antiguo 19/10/2015, 11:10
 
Fecha de Ingreso: julio-2007
Mensajes: 10
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: Duda inner join

Mil gracias Mr! pero no es eso!


De esta forma con cualquiera de las dos condiciones aparece y yo lo quiero es que aparezca s¡ se cumplen las dos
  #4 (permalink)  
Antiguo 19/10/2015, 11: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, 4 meses
Puntos: 2658
Respuesta: Duda inner join

Las dos condiciones son contradictorias, porque un mismo registro no puede tener dos valores en un campo dado al mismo tiempo.
Para hacer lo que quieres deberás hacer un or con GROUP BY, usando un HAVING COUNT (*)=2.
__________________
¿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 19/10/2015, 12:11
 
Fecha de Ingreso: julio-2007
Mensajes: 10
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: Duda inner join

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Las dos condiciones son contradictorias, porque un mismo registro no puede tener dos valores en un campo dado al mismo tiempo.
Para hacer lo que quieres deberás hacer un or con GROUP BY, usando un HAVING COUNT (*)=2.

uff... no pillo porque utilizando el OR y el HAVING COUNT (*)=2 me ha de devolver los registros que cumplan con las dos condiciones....

Investigaré sobre ello.

Gracias
  #6 (permalink)  
Antiguo 19/10/2015, 12:16
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 7 meses
Puntos: 774
Respuesta: Duda inner join

A ver como es posible que un campo tenga 2 valores? dices que el campo A tenga 7 y 9 :s eso como es posible??

Lo que te dice gnzoloyo es que con un count puedes hacer que te regrese lo que buscas, si haces un or y luego un count, si la columna cumple con las 2 condiciones te va a regresar un 2 que es lo que buscas......
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 19/10/2015, 12:32
 
Fecha de Ingreso: julio-2007
Mensajes: 10
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: Duda inner join

Cita:
Iniciado por Libras Ver Mensaje
A ver como es posible que un campo tenga 2 valores? dices que el campo A tenga 7 y 9 :s eso como es posible??

Lo que te dice gnzoloyo es que con un count puedes hacer que te regrese lo que buscas, si haces un or y luego un count, si la columna cumple con las 2 condiciones te va a regresar un 2 que es lo que buscas......
Hola! ya ha quedao claro antes que está mal planteada la consulta: no busco un campo que tenga 2 valores (a tan tonto aún no he llegado.. dame tiempo)

Lo que busco es que dentro de una serie de registros de una misma tabla haya uno (con el mismo ID) que cumpla con dos condiciones.. es decir, que en un registro tenga, por ejmplo, los campos ID='1' , CAMPO1='PERIQUITO', CAMPO2='AVE' y también exista otro que sea ID='1', CAMPO1='BURRO' y CAMPO2='MAMIFERO'

Igual no me explico del todo bien y pido perdón por ello!

Cualquier ayuda es agradecida! si ayudar supone ponerse de mal humor prefiero que no me contesten! ya lo pillaré con el tiempo!

  #8 (permalink)  
Antiguo 20/10/2015, 02:30
 
Fecha de Ingreso: julio-2007
Mensajes: 10
Antigüedad: 16 años, 9 meses
Puntos: 1
Respuesta: Duda inner join

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Las dos condiciones son contradictorias, porque un mismo registro no puede tener dos valores en un campo dado al mismo tiempo.
Para hacer lo que quieres deberás hacer un or con GROUP BY, usando un HAVING COUNT (*)=2.
lo pillé.. muchas gracias por la ayuda. Al final entendí la relación entre el OR y el Having. A tantas condiciones como haya se le ha de asignar el mismo valor a having count. Lo explico por si alguien llega hasta aquí!

select tabla1.ID from tabla1
INNER JOIN tabla2 on tabla1.ID=tabla2.ID
WHERE
(tabla2.CAMPO1='1' and tabla2.CAMPO2='1')
OR
(tabla2.CAMPO1='2' and tabla2.CAMPO2='1')
OR
(tabla2.CAMPO1='3' and tabla2.CAMPO2='1')
GROUP BY tabla1.ID
HAVING COUNT(tabla2.ID) = 3


Gracias a todos!

Última edición por elfonario; 20/10/2015 a las 02:55

Etiquetas: campo, join, select, tabla
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 06:49.