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

Consulta con join mysql

Estas en el tema de Consulta con join mysql en el foro de Mysql en Foros del Web. Hola todos foreros, espero que esten bien. Bueno les comento mi duda... tengo una consulta a la base de datos la cual me funciona pero ...
  #1 (permalink)  
Antiguo 22/10/2012, 15:41
 
Fecha de Ingreso: marzo-2010
Ubicación: Cali
Mensajes: 203
Antigüedad: 14 años, 1 mes
Puntos: 5
Pregunta Consulta con join mysql

Hola todos foreros, espero que esten bien.

Bueno les comento mi duda... tengo una consulta a la base de datos la cual me funciona pero necesito incluir un filtro mas a la consulta, lo cual consilte en que me traiga los datos de una tabla asi no exista en otra tabla es decir un 'join' pero lo que no he podido hacer es que si existe un registro en la otra tabla cumpla una condicion y es que el estado es 0. les pongo mi codigo

Código MySQL:
Ver original
  1. SELECT CONCAT(u.nombres,' ', u.apellidos) Registro, r.id_radicado, r.tipo_lic,
  2.                 r.fecha_radicado, r.categoria, r.formulario, r.tipo_lic, r.estado_pro, r.nro_radicado, r.proyecto
  3.                 FROM
  4.                 usuario u, radicado r inner join (select * from (select * from licencias order by id_licencia desc) t1 where t1.estado = 0 group by id_radicado desc) as l on r.id_radicado = l.id_radicado
  5.                 inner join (select * from (select * from alertas order by id desc) t1 group by nro_radicado desc) as alerta on r.nro_radicado = alerta.nro_radicado
  6.                
  7.             WHERE
  8.           r.fecha_radicado BETWEEN '2011-01-19' AND '$fecha' AND r.tipo_lic IS NOT NULL
  9.           AND r.revisor = u.id_usuario
  10.           ".$m."  order by r.fecha_radicado desc

el problema lo tengo con licencias que es el filtro que estoy aggando que como les comento los regitros de esa tabla van relacionadas a la tabla radicado de acuerdo al id_radicado. lo que no he podido hacer o no se si deba re estructurar mi query es que me traiga datos de la tabla radicado junto con datos del ultimo registro de la tabla alertas en caso de que existan registros, si no, pues no muestre null e igualmente con registros de licencias que en caso de que exista registro el estado de este sea igual a 0 y si no que muestre null.

aclaro que las variables como $m y $fecha ya esta comprobado que no son el problema.

la verdad estoy confundido con esto y no he podido dar con la solucion. estaria muy agradecido con lo que me puedan guiar para poder hacer esto.

De antemano muchas gracias por su atencion y tiempo.
  #2 (permalink)  
Antiguo 24/10/2012, 10:13
 
Fecha de Ingreso: marzo-2010
Ubicación: Cali
Mensajes: 203
Antigüedad: 14 años, 1 mes
Puntos: 5
Respuesta: Consulta con join mysql

Hola de nuevo a todos.. aun sigo sin tener resultados positivos en la pruebas que he hecho...

les pido colaboración nuevamente, para que me guíen en este problema que tengo.

Para que entiendan mejor lo que necesito es hacer una consulta donde me traigan los datos de una tabla X que no exitan en la tabla Z pero que que al mismo tiempo me traigan los datos de la tabla X donde el estado de la tabla Y es igual 0, es caso de que exista algun registro.

en pocas palabras me consulte datos de la tabla X que cumplan con estas dos condiciones:

1. Que no exista ningun registro en Y con el id del registro de la tabla X.
2. que también me traiga los que existen en la tabla Y y el estado de este sea 0

De antemano agradezco su ayuda y tiempo
  #3 (permalink)  
Antiguo 24/10/2012, 10:26
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: Consulta con join mysql

Cita:
consilte en que me traiga los datos de una tabla asi no exista en otra tabla
1) Si una relación es opcional, no corresponde usar INNER JOIN sino LEFT JOIN.
2) Si usas LEFT JOIN, devovlerá nulos donde no haya coincidencias. Deberás administrar eso.
3) No es buena práctica usar JOINs implícitos (la coma) junto con JOIN explícitos como estás haciendo. Los resultados pueden no ser correctos.
4) Un JOIN implícito empareja campos por nombre, por lo que nombres iguales referidos a datos distintos genera errores calamitosos.
5) Cuando usas LEFT JOIN, ý la segunda tabla no devuelve datos, todo JOIN (INNER/LEFT/RIGHT) apoyada en ella devolverá NULL en esos registros.

¿Se entiende el problema?
__________________
¿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 24/10/2012, 10:38
 
Fecha de Ingreso: marzo-2010
Ubicación: Cali
Mensajes: 203
Antigüedad: 14 años, 1 mes
Puntos: 5
Respuesta: Consulta con join mysql

Perfecto muchas gracias por tu tiempo y ayuda ya he logrado dar solución al problema, a continuación dejo la consulta :)

Código MySQL:
Ver original
  1. SELECT r.nro_radicado, l.fecha_licencia, l.estado
  2. FROM radicado r
  3.  
  4. id_radicado
  5. ), estado, fecha_licencia
  6. FROM licencias
  7. ) AS l ON ( r.id_radicado = l.id_radicado)
  8. WHERE (l.id_radicado IS NULL OR l.estado = 0) AND r.fecha_radicado
  9. BETWEEN '2011-01-19'
  10. AND '2011-02-01'

Nuevamente muchas gracias
  #5 (permalink)  
Antiguo 24/10/2012, 10:40
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta con join mysql

Hola andruxand:

Creo que si pusieras algunos datos de ejemplo sería más fácil de entender qué es lo que necesitas, pero si entendí correctamente tú ultima explicación podrías hacer más o menos esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tablaX;
  2. +------+-------------+
  3. | idX  | descripcion |
  4. +------+-------------+
  5. |    1 | uno         |
  6. |    2 | dos         |
  7. |    3 | tres        |
  8. |    4 | cuatro      |
  9. +------+-------------+
  10. 4 rows in set (0.00 sec)
  11.  
  12. mysql> SELECT * FROM tablaY;
  13. +------+------+------------------+--------+
  14. | idY  | idX  | otra_descripcion | estado |
  15. +------+------+------------------+--------+
  16. |   10 |    1 | otro uno         |      0 |
  17. |   20 |    2 | otro dos         |      1 |
  18. +------+------+------------------+--------+
  19. 2 rows in set (0.00 sec)
  20.  
  21. mysql> SELECT * FROM tablaX tx
  22.     -> WHERE
  23.     -> NOT EXISTS (SELECT idX FROM tablaY ty WHERE tx.idX = ty.idX)
  24.     -> OR  EXISTS (SELECT idX FROM tablaY ty
  25.     ->             WHERE tx.idX = ty.idX AND ty.estado = 0);
  26. +------+-------------+
  27. | idX  | descripcion |
  28. +------+-------------+
  29. |    1 | uno         |
  30. |    3 | tres        |
  31. |    4 | cuatro      |
  32. +------+-------------+
  33. 3 rows in set (0.00 sec)

Observa que en la tablaY existe el idX = 1, pero su estado es igual a 0, para el caso de los idX 3, y 4 estos no existen en la tablaY... de tal suerte que el único registro que no se muestra es el idX = 2, ya que este SI EXISTE en la tablaY y además tiene un estado distinto a 0.

Si esto no te sirve puedes tratar de poned datos como lo hice yo, para explicar mejor tu problema.

Código:
EDITADO: es mejor la opción del LEFT JOIN, pero igual y te sirve para conocer otro modo de resolver el problema.

Saludos

Saludos
Leo.
  #6 (permalink)  
Antiguo 24/10/2012, 10:43
 
Fecha de Ingreso: marzo-2010
Ubicación: Cali
Mensajes: 203
Antigüedad: 14 años, 1 mes
Puntos: 5
Respuesta: Consulta con join mysql

Leonardo Muchas gracias de verdad.. precisamente así era :). de verdad muchas gracias no había pensado en esta otra forma que planteaste.

Gracias por tu colaboración y tiempo.

Etiquetas: join, registros, select, tabla, tipo
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 21:47.