Ver Mensaje Individual
  #4 (permalink)  
Antiguo 20/11/2013, 10:56
leonardo_josue
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