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

[SOLUCIONADO] Comparacion de dos tablas en mysql y buscar los datos que no existen.

Estas en el tema de Comparacion de dos tablas en mysql y buscar los datos que no existen. en el foro de Mysql en Foros del Web. Tengo dos tablas en mysql que contienen un campo en común. La tabla TPERSONAL que tiene el campo id, campo documento, campo nombre. La tabla ...
  #1 (permalink)  
Antiguo 20/11/2013, 10:32
 
Fecha de Ingreso: noviembre-2013
Ubicación: Bogotá
Mensajes: 4
Antigüedad: 11 años
Puntos: 0
Exclamación Comparacion de dos tablas en mysql y buscar los datos que no existen.

Tengo dos tablas en mysql que contienen un campo en común.
La tabla TPERSONAL que tiene el campo id, campo documento, campo nombre.
La tabla TRESGITRO que contiene su id, la relación id_tpersonal y fecha

Ahora lo que busco es que me muestre las personas que no están registradas en la fecha actual, pero la verdad no veo ningún resultado con la consulta que realice quisiera saber quien me podría echar una manito con este problema.

Código MySQL:
Ver original
  1. SELECT b.id , b.nombre
  2. FROM tpersonal b LEFT JOIN tregistro a ON b.id = a.Tpersona_id
  3. WHERE a.Tpersona_id IS NULL  && a.fecha = (select date (now()))
[/CODE]


:a rriba:

Última edición por gnzsoloyo; 20/11/2013 a las 10:39
  #2 (permalink)  
Antiguo 20/11/2013, 10: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: 17 años
Puntos: 2658
Respuesta: Comparacion de dos tablas en mysql y buscar los datos que no existen.

Cita:
Ahora lo que busco es que me muestre las personas que no están registradas en la fecha actual, pero la verdad no veo ningún resultado con la consulta que realice quisiera saber quien me podría echar una manito con este problema.
La consutla tal como la planteas tiene dos errores:
1) No puedes poner AND cuando el campo es NULL si al mismo tiempo consultas por otro de los campos de esa subtabla, porque esa condición excuye cualquier registro que exista... y por tanto la defcha también sería NULL.
2) ¿Para qué usas (SELECT NOW()). Es un desperdicio de tiempo y recursos. Bien podrías usar directamente la función, aunque si estás buscando por fecha, es mejor que uses CURDATE()

Por lo pronto, si la segunda tabla contiene los datos de registración, no corresponde usar LEFT JOIN sino INNER JOIN
Código MySQL:
Ver original
  1. SELECT b.id , b.nombre
  2. FROM tpersonal b INNER JOIN tregistro a ON b.id = a.Tpersona_id
  3. WHERE DATE(a.fecha) = CURDATE();
__________________
¿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 20/11/2013, 10:53
 
Fecha de Ingreso: noviembre-2013
Ubicación: Bogotá
Mensajes: 4
Antigüedad: 11 años
Puntos: 0
Respuesta: Comparacion de dos tablas en mysql y buscar los datos que no existen.

Muchas gracias por tu pronta respuesta la consulta esta perfecta, pero el problema es que me sigue trayendo los datos que están registrado a la fecha actual y l que busco es que me muestre los que no están registrados

la verdad que esto me lleva dos días de trabajo y nada que doy con la respuesta.
  #4 (permalink)  
Antiguo 20/11/2013, 10:56
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Comparacion de dos tablas en mysql y buscar los datos que no existen.

Hola arleycalderon:

Vayamos por partes, en primer lugar tendrías que decirnos de qué tipo de dato es tu columna fecha, supongo que será date o datetime, pero este dato es muy importante por la cuestión de las horas... si estás almacenando sólo la fecha entonces es de tipo DATE, pero si estás almacenando la fecha y la hora entonces es DATETIME y tienes que hacer un tratamiento especial para no considerar las horas.

Segundo, para comparar contra la fecha actual no hay necesidad de que pongas esto:

Código:
...
a.fecha = (select date (now()))
por un lado, es un desperdicio que utilices la función now() que trae fecha y hora si después vas a aplicar la función date() para extraer sólo la fecha... si hubieras revisado a conciencia las funciones de fecha y hora te habrías dado cuenta que con CURDATE() lo obtienes directo... entonces la comparación quedaría así:

Si tu campo fecha es DATE.
Código:
...
a.fecha = curdate()

Si tu campo fecha es datetime.

Código:
...
DATE(a.fecha) = CURDATE()
Ahora bien, tu nos comentas esto:

Cita:
lo que busco es que me muestre las personas que no están registradas en la fecha actual
Según esta lógica entonces hay dos posibilidades para mostrar a una persona, una sería que NO EXISTA EN LA TABLA TREGISTRO... en este caso es correcta la comparación que haces al preguntar

Código:
...
WHERE
   a.Tpersona_id IS NULL
Sin embargo, según el enunciado que tienes, también debería mostrar aquellos registros QUE SI EXISTAN EN LA TABLA TREGISTRO PERO QUE LA FECHA DE REGISTRO NO SEA LA FECHA ACTUAL...

Tal como estás poniendo la condición ES OBVIO QUE SIEMPRE DE DARÁ UNA CONSULTA VACIA, porque por un lado estás comprobando que no exista en la tabla de registros pero al mismo tiempo le dices que la fecha del ese registro no sea la actual... eso es tan absurdo como querer encontrar un numero que sea par pero que no sea divisible entre 2 .

La consulta podría quedar así:

Código MySQL:
Ver original
  1. SELECT b.id , b.nombre
  2. FROM tpersonal b
  3. LEFT JOIN tregistro a ON b.id = a.Tpersona_id
  4.    a.Tpersona_id IS NULL OR
  5.    (a.Tpersona_id IS NOT NULL  AND date(a.fecha) != curdate())

Si continuas con problemas postea algunos datos de ejemplo de tus tablas

Saludos
Leo.

Última edición por leonardo_josue; 20/11/2013 a las 11:01
  #5 (permalink)  
Antiguo 20/11/2013, 10:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Comparacion de dos tablas en mysql y buscar los datos que no existen.

Con esa misma consulta, pero cambiando su operador... No entiendo cómo es que no lo ves:
Código MySQL:
Ver original
  1. SELECT b.id , b.nombre
  2. FROM tpersonal b INNER JOIN tregistro a ON b.id = a.Tpersona_id
  3. WHERE DATE(a.fecha) != CURDATE();
Código MySQL:
Ver original
  1. SELECT b.id , b.nombre
  2. FROM tpersonal b INNER JOIN tregistro a ON b.id = a.Tpersona_id
  3. WHERE DATE(a.fecha) <> CURDATE();
Código MySQL:
Ver original
  1. SELECT b.id , b.nombre
  2. FROM tpersonal b INNER JOIN tregistro a ON b.id = a.Tpersona_id
  3. WHERE DATE(a.fecha) < CURDATE();
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 20/11/2013, 11:38
 
Fecha de Ingreso: noviembre-2013
Ubicación: Bogotá
Mensajes: 4
Antigüedad: 11 años
Puntos: 0
Respuesta: Comparacion de dos tablas en mysql y buscar los datos que no existen.

Ok creo que no he sido muy claro con mi pregunta
estos son mis datos.

https://googledrive.com/host/0B3yP7EEG6WjKN003NTByaG5mR3M/

lo que busco es que me muestres los Tpersona_id 3, 5 y 7 al 10 que NO estan en la fecha actual
  #7 (permalink)  
Antiguo 20/11/2013, 12:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 7 meses
Puntos: 300
Respuesta: Comparacion de dos tablas en mysql y buscar los datos que no existen.

Si buscas aquellos cuyo id no aparece con fecha del día de hoy del servidor en la tabla tregistro, creo que tal vez así (no lo he probado).
Código MySQL:
Ver original
  1. SELECT tp.*
  2. FROM tpersonal tp
  3.     (SELECT Tpersona_id FROM tregistro WHERE fecha = CURDATE())t1
  4.   ON tp.id = t1.Tpersona_id
  5. WHERE t1.Tpersona_id IS NULL
  #8 (permalink)  
Antiguo 20/11/2013, 12:31
 
Fecha de Ingreso: noviembre-2013
Ubicación: Bogotá
Mensajes: 4
Antigüedad: 11 años
Puntos: 0
Respuesta: Comparacion de dos tablas en mysql y buscar los datos que no existen.

jurena excelente, me has sacado de apuros muchas gracias esto era lo que buscaba.

Etiquetas: campo, comparacion, join, null, registro, select, sql, 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.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:22.