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

Consulta mysql!

Estas en el tema de Consulta mysql! en el foro de Mysql en Foros del Web. hola todos. espero que esten bien. Bueno les comento mi duda.... es que necesito que de una tabla llamada radicado me muestre cierta informacion de ...
  #1 (permalink)  
Antiguo 03/04/2012, 10:24
 
Fecha de Ingreso: marzo-2010
Ubicación: Cali
Mensajes: 203
Antigüedad: 14 años, 1 mes
Puntos: 5
Pregunta Consulta mysql!

hola todos. espero que esten bien.

Bueno les comento mi duda.... es que necesito que de una tabla llamada radicado me muestre cierta informacion de dicha tabla con la siguientes condiciones:

no exista el id_radicado en la tabla llamada licencia o en caso de que exista el id_radicado en la tabla licencias pero que en el campo estado de la tabla licencias tenga valor null o 0..

si me pueden explicar como lo podria hacer, con condicionales, o no se de verdad les agradecería mucho su ayuda.
  #2 (permalink)  
Antiguo 03/04/2012, 15:03
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta mysql!

Hola andruxand:

Antes que nada, espero que estés consiente de que aquí no hacemos el trabajo de otros correcto??? partiendo de ese supuesto quisiera que nos dijeras qué es lo que haz intentado hacer o cual es tu duda??? es decir, en la manera en que estás redactando tu post no expresas en realidad ninguna problemática.

Si no tienes conocimiento de SQL, primero te recomiendo leer acerca de álgebra relacional, las condiciones NOT IN y NOT EXISTS y los operadores AND y OR... estos son principios básicos para poder hacer cualquier consulta. Si tienes dudas en alguno de estos temas PUBLICA LO QUE INTENTASTE HACER y con gusto te ayudamos a corregir la consulta.

Saludos
Leo.
  #3 (permalink)  
Antiguo 04/04/2012, 07:56
 
Fecha de Ingreso: marzo-2010
Ubicación: Cali
Mensajes: 203
Antigüedad: 14 años, 1 mes
Puntos: 5
Respuesta: Consulta mysql!

hola leonardo... de antemano muchas gracias por tu respuesta.

Pues mira te muestro lo que hasta ahora he hecho:

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,
  5.             radicado r left join licencias l on l.id_radicado = r.id_radicado
  6.          WHERE
  7.          
  8.        
  9.           r.fecha_radicado BETWEEN '2011-08-01' AND '2011-12-01'
  10.          
  11.          group by r.fecha_radicado desc

la duda que aun tengo es como poner una condicional que me muestre la info de radicados que no existen en licencias o en su defecto si existen, que en el campo estado tenga valor 0...

de verdad agradecería que me explicaran un poco es parte. ya que no la manejo muy bien.

De antemano agradezco por su tiempo y ayuda!!..
  #4 (permalink)  
Antiguo 04/04/2012, 08:35
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta mysql!

Hola de nuevo andruxand:

Vayamos por partes.

Primero, por la forma en que estás poniendo tus tablas en el FROM y los JOIN's se está realizando un producto cartesiano entre tus tablas usuario y radicado... no tienes definida ninguna condición de unión entre estas tablas. Lamentablemente no nos pones cual es la estructura de cada una de tus tablas, por lo tanto no estoy seguro de los campos que tengas que poner en la unión.

No es recomendable que mezcles JOIN'S y uniones explícitas (tablas separadas por comas) en tus consultas... Trata de usar siempre JOIN's del tipo que necesites, además de que son más rápidos que las uniones explícitas, es más fácil darte cuenta cuando falta definir algún criterio.

En lugar de poner algo como esto:

Código:
FROM
usuario u, radicado r 
LEFT JOIN licencias l on l.id_radicado = r.id_radicado
Trata siempre de poner las consultas así:

Código:
FROM 
usuario u
INNER JOIN radicado r ON u.id_usuario = r.id_usuario
LEFT JOIN licencias l on l.id_radicado = r.id_radicado
Pongo la condición ON en rojo porque es justamente la unión que falta definir, es decir por qué campos están relacionadas las tablas usuario y radicado.

Ahora bien, pasando a tu problema, como te comenté en el post pasado tienes muchas formas de obtener la consulta que quieres, utilizando NOT IN, NOT EXISTS o LEFT y/o RIGTH JOIN's... observa este ejemplo.

Código MySQL:
Ver original
  1. mysql> SELECT * FROM tabla1;
  2. +----------+-------------+
  3. | idTabla1 | 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 tabla2;
  13. +----------+----------+---------+
  14. | idTabla2 | idTabla1 | estatus |
  15. +----------+----------+---------+
  16. |        1 |        1 |       1 |
  17. |        2 |        2 |       0 |
  18. |        3 |        3 |    NULL |
  19. +----------+----------+---------+
  20. 3 rows in set (0.00 sec)
  21.  
  22. mysql> SELECT * FROM tabla1 WHERE idTabla1 NOT IN
  23.     -> ( SELECT idTabla1 FROM tabla2
  24.     ->   WHERE estatus != 0 AND estatus IS NOT NULL
  25.     -> );
  26. +----------+-------------+
  27. | idTabla1 | descripcion |
  28. +----------+-------------+
  29. |        2 | dos         |
  30. |        3 | tres        |
  31. |        4 | cuatro      |
  32. +----------+-------------+
  33. 3 rows in set (0.06 sec)
  34.  
  35. mysql> SELECT * FROM tabla1 WHERE NOT EXISTS
  36.     -> ( SELECT idTabla1 FROM tabla2
  37.     ->   WHERE estatus != 0 AND estatus IS NOT NULL
  38.     ->   AND tabla1.idTabla1 = tabla2.idTabla1
  39.     -> );
  40. +----------+-------------+
  41. | idTabla1 | descripcion |
  42. +----------+-------------+
  43. |        2 | dos         |
  44. |        3 | tres        |
  45. |        4 | cuatro      |
  46. +----------+-------------+
  47. 3 rows in set (0.00 sec)
  48.  
  49. mysql> SELECT tabla1.*, tabla2.* FROM tabla1
  50.     -> LEFT JOIN tabla2 ON tabla1.idTabla1 = tabla2.idTabla2
  51.     -> WHERE tabla2.estatus = 0 OR tabla2.estatus IS NULL;
  52. +----------+-------------+----------+----------+---------+
  53. | idTabla1 | descripcion | idTabla2 | idTabla1 | estatus |
  54. +----------+-------------+----------+----------+---------+
  55. |        2 | dos         |        2 |        2 |       0 |
  56. |        3 | tres        |        3 |        3 |    NULL |
  57. |        4 | cuatro      |     NULL |     NULL |    NULL |
  58. +----------+-------------+----------+----------+---------+
  59. 3 rows in set (0.00 sec)

Observa que el único registro que se está excluyendo de la tabla1 es el idTabla1 = 1, ya que este tiene un estatus 1 en la tabla2... el registro 2 EXISTE EN LA TABLA2, pero tiene un estatus 0. El registro 3 EXISTE EN LA TABLA 2, pero tiene un estatus null. El registro 4 NO EXISTE EN LA TABLA2.

Dale un vistazo y cualquier duda la comentas en el foro.

Saludos
Leo.

Etiquetas: tabla, campos
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 11:22.