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

Novato con LEFT JOIN

Estas en el tema de Novato con LEFT JOIN en el foro de Mysql en Foros del Web. Hola, necesito hacer una consulta que me de como resultado la campos que estan en una tabla menos los que estan en otra mas unas ...
  #1 (permalink)  
Antiguo 05/06/2010, 17:54
 
Fecha de Ingreso: abril-2010
Mensajes: 26
Antigüedad: 14 años
Puntos: 0
Novato con LEFT JOIN

Hola, necesito hacer una consulta que me de como resultado la campos que estan en una tabla menos los que estan en otra mas unas condiciones, las tablas son las siguientes:

usuario_auditoria (num_aud,cod_usu)

usuarios(cod_usu,cod_empresa , nombre, mas otros datos irrelevantes para este problema)

la consulta que tengo hasta el momento es la siguiente:

select usuarios.cod_usu,usuarios.nombre from usuarios left join usuario_auditoria on usuarios.cod_usu=usuario_auditoria.cod_usu where usuario_auditoria.cod_usu is null and usuarios.cod_empresa=3

que me retorna los usuarios de la empresa de codigo 3 que no estan en la tabla usuario_auditoria, lo que me falta es agregarle la condicion de que aparte de ser de la empresa 3 , el num_aud sea 6 (por ejemplo), he intentado agregar la condicion pero no me funciona, alguien sabe como quedaria finalmente la consulta con las dos condiciones??? gracias.

Última edición por killemalljustice; 05/06/2010 a las 18:08
  #2 (permalink)  
Antiguo 06/06/2010, 12:36
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Novato con LEFT JOIN

¿Probaste esto?:
select usuarios.cod_usu,usuarios.nombre from usuarios left join usuario_auditoria on usuarios.cod_usu=usuario_auditoria.cod_usu where usuario_auditoria.cod_usu is null and usuarios.cod_empresa=3 and usuario_auditoria.num_aud = 6
  #3 (permalink)  
Antiguo 23/06/2010, 18:46
 
Fecha de Ingreso: abril-2010
Mensajes: 26
Antigüedad: 14 años
Puntos: 0
Respuesta: Novato con LEFT JOIN

disculpa la respuesta tardia, lo que me comentas ya lo probe y no entrega los resultados que quiero, pasa esto, suponte que tengo estos datos en las tablas

USUARIOS

Cod_Usu Nombre Cod_emp

----1----Usuario1----2
----2----Usuario2----3
----3----Usuario3----3
----4----Usuario4----3
----5----Usuario5----3
----6----Usuairo6----3

USUARIO_AUDITORIA


Num_Aud Cod_Usu

----10------3
----10------5
----11------6

la primera consulta que si me resulta me retorna los usuarios de la empresa 3 que no estan asignados a una auditoria.

select usuarios.cod_usu,usuarios.nombre from usuarios left join usuario_auditoria on usuarios.cod_usu=usuario_auditoria.cod_usu where usuario_auditoria.cod_usu is null and usuarios.cod_empresa=3

la cual me retorna los usuarios 2 y 4


ahora si quiero que la consulta me retorne los usuarios de la empresa 3 que no estan asignados a una auditoria especifica por ejemplo la 10

select usuarios.cod_usu,usuarios.nombre from usuarios left join usuario_auditoria on usuarios.cod_usu=usuario_auditoria.cod_usu where usuario_auditoria.cod_usu is null and usuarios.cod_empresa=3 and usuario_auditoria.num_aud = 10

deberia retornar 2, 4 y 6 pero en cambio el resultado de la consulta es vacio, alguna idea de porque puede ser??
  #4 (permalink)  
Antiguo 26/06/2010, 18:18
 
Fecha de Ingreso: abril-2010
Mensajes: 26
Antigüedad: 14 años
Puntos: 0
Respuesta: Novato con LEFT JOIN

alguna idea???
  #5 (permalink)  
Antiguo 26/06/2010, 19:20
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Novato con LEFT JOIN

select usuarios.cod_usu,usuarios.nombre from usuarios INNER JOIN usuario_auditoria on usuarios.cod_usu=usuario_auditoria.cod_usu where usuarios.cod_empresa=3 AND usuario_auditoria.Num_aud != 10

Última edición por jurena; 27/06/2010 a las 01:02
  #6 (permalink)  
Antiguo 26/06/2010, 21:12
 
Fecha de Ingreso: abril-2010
Mensajes: 26
Antigüedad: 14 años
Puntos: 0
Respuesta: Novato con LEFT JOIN

Cita:
Iniciado por jurena Ver Mensaje
select usuarios.cod_usu,usuarios.nombre from usuarios left join usuario_auditoria on usuarios.cod_usu=usuario_auditoria.cod_usu where usuarios.cod_empresa=3 AND usuario_auditoria.Num_aud != 10
hola, gracias por tu respuesta pero tambien me arroja vacio, probe que pasaba si ponia num_aud=10 y me devuelve 3 y 5 que es lo obvio pero al poner !=10 como me dices tu lo logico seria que devolviera el resto de los usuarios pero no funciono.
  #7 (permalink)  
Antiguo 26/06/2010, 21:28
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: Novato con LEFT JOIN

Cita:
ahora si quiero que la consulta me retorne los usuarios de la empresa 3 que no estan asignados a una auditoria especifica por ejemplo la 10
SI te fijas en tu penúltimo post, las condiciones que propones son excluyentes si pones un AND en el WHERE, por lo que esto:
Código MySQL:
Ver original
  1.    U.cod_usu,
  2.    U.nombre
  3.    usuarios U LEFT JOIN usuario_auditoria UA on U.cod_usu = UA.cod_usu
  4.    U.cod_empresa=3 AND UA.Num_aud != 10;
forzosamente debe darte vacío, ya que la auditoria de la empresa 3, es precisamente la 10... la que estás eliminando. Y no sirve poner "=" en este ejemplo, porque te estarías refiriendo a la misma auditoría...

La solución es mas o menos sencilla: Necesitas que se cumpla una de dos condiciones: Que la empresa sea la 3, o bien que la auditoría sea diferente de 10. Y un "o bien", es un OR:
Código MySQL:
Ver original
  1.    U.cod_usu,
  2.    U.nombre
  3.    usuarios U LEFT JOIN usuario_auditoria UA on U.cod_usu = UA.cod_usu
  4.    U.cod_empresa=3 OR UA.Num_aud != 10;

El ejemplo, en definitiva no tiene mucho sentido, porque si pones los que trabajan en una auditoría para una empresa, y además el resto... ¿para qué haces la distinción?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 26/06/2010 a las 21:35
  #8 (permalink)  
Antiguo 27/06/2010, 01:22
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Novato con LEFT JOIN

Yo creí que cambiaste de criterios de búsqueda:
1)
Cita:
los usuarios de la empresa de codigo 3 que no estan en la tabla usuario_auditoria agregándole la condicion de que aparte de ser de la empresa 3 , el num_aud sea 6 (por ejemplo)
Imposible: pues pides que no estén en la tabla usuario_auditoria y luego exiges que el num_aud = 6, algo que tendría que aparecer en la tabla usuario_auditoria. Por tanto, nunca te devolverá nada. Ya te lo ha dicho gnzsoloyo.
2)
Cita:
ahora si quiero que la consulta me retorne los usuarios de la empresa 3 que no estan asignados a una auditoria especifica por ejemplo la 10
Aquí pensé que habías cambiado de criterio y que buscabas todos los de la empresa 3 que no están asignados a a auditoria 10, pero que, como es lógico, tenían datos en la tabla auditoria_usuario, es decir, estaban asignados a otras auditorias. Con la última consulta que te propuse (la que no tiene el null e incluso y en la que he cambiado el LEFT JOIN por INNER JOIN), sale el Usuario6, pues pertenece a la empresa 3 y tiene como num_aud el 11. Pero tampoco esa consulta mía resuelve bien todos los casos, pues si el usuario 6 también tuviera como num_aud el 10, seguiría saliendo. Para lo que yo he entendido es mejor usar un
Código MySQL:
Ver original
  1.    U.cod_usu,
  2.    U.nombre
  3.    usuarios U LEFT JOIN usuario_auditoria UA on U.cod_usu = UA.cod_usu
  4.  WHERE U.cod_empresa=3
  5.  AND U.Cod_usu NOT IN (SELECT Cod_usu FROM usuario_auditoria  WHERE Num_aud = 10)
Como ves, el problema que tienes no es tanto la consulta en sí como que la lógica de búsqueda pueda ofrecerte resultados.

Última edición por jurena; 27/06/2010 a las 01:28
  #9 (permalink)  
Antiguo 27/06/2010, 09:20
 
Fecha de Ingreso: abril-2010
Mensajes: 26
Antigüedad: 14 años
Puntos: 0
Respuesta: Novato con LEFT JOIN

Muchas gracias , problema resuelto :) , aahh lo ultimo, alguien tiene una pagina con un buen tutorial para usar los JOINS?? una que sea a prueba de tontos jaajaj

Etiquetas: join, left
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 17:05.