Cómo consultar dos tablas mysql y obtener resultados que no están en ambas tablas o cumplen la condición especificada
Frecuentes
Visto 193 equipos
4
Tengo dos mesas
tabla de usuario
user_id | name |
1 | peter |
2 | kofi |
3 | sam |
4 | nasah |
5 | sarah |
6 | david |
7 | dan |
horario
time_id | user_id | register
1 | 1 | present
2 | 2 | absent
3 | 3 | absent
4 | 4 | present
5 | 5 | absent
en la tabla "tiempo" en la columna "registro", el usuario puede registrar "presente" o "ausente" cuando inicia sesión en el sistema.
Quiero una consulta mysql que seleccione usuarios que se hayan registrado como "ausentes" o que no se hayan registrado en absoluto.
el resultado devuelto debe ser
kofi | absent
sam | absent
sarah | absent
david |
dan |
2 Respuestas
3
Que pasa con esto
SELECT t2.name, t1.register
FROM time t1
RIGHT JOIN user t2
ON t2.user_id=t1.user_id
WHERE (t1.register = 'absent' OR t1.register is null)
Está funcionando, probado aquí.
actualización 1
Según su conversación, desea filtrar más según la hora/fecha
digamos que quiero averiguar quiénes estuvieron ausentes o no ingresaron al sistema antes del 06-13-12, suponiendo que haya una columna con el nombre "fecha" en el horario
Utilice la siguiente consulta
SELECT t2.name, t1.register, t1.mydate
FROM time t1
RIGHT JOIN user t2
ON t2.user_id=t1.user_id
WHERE
(t1.register = 'absent' OR t1.register is null)
AND
(t1.mydate <= '2012-06-13' OR t1.mydate is null)
Aquí hay una demostración para el nuevo requisito.
Espero que esto sea lo que querías.
Respondido el 12 de junio de 12 a las 20:06
lo siento, he reestructurado mi pregunta. cometí un error en mi segunda tabla, en realidad era la identificación de los usuarios de la tabla 1. gracias por su rápida respuesta. - David Addoteye
+1, después de ver su respuesta, me di cuenta de que no entendí bien la pregunta de OP (sin embargo, la consulta que di funcionó). De todos modos, eliminé mi respuesta, pero tal vez podría agregar la parte que tenía sobre arreglar el user_id
columna en time
? Creo que sería bueno que el OP aprenda ese concepto. - viento
Intenté tu respuesta, funcionó perfectamente. Gracias. Sin embargo, tengo una pregunta de seguimiento. ¿Qué tal si quiero filtrar el resultado final nuevamente por fecha? digamos que quiero averiguar quiénes estuvieron ausentes o no ingresaron al sistema antes del 06/13/12, suponiendo que haya un nombre de columna "fecha" en el horario - David Addoteye
0
Utilice esta consulta:
SELECT t1.name,t2.register from user t1
left join time t2 on t1.user_id=t2.user_id
where t2.register='absent' or t2.register IS NULL;
Respondido el 12 de junio de 12 a las 19:06
Inteligente... ¿Esto parece una copia mía? - Fahim Parkar
Sí, estaba intentando consultas en sqlfiddle con el enlace que proporcionó. Se ve genial para probar consultas rápidamente. Además, preferiría LEFT JOIN ya que evitaría cualquier nombre que esté presente en t2 pero no en t1. - Sushil
lo siento, he reestructurado mi pregunta. cometí un error en mi segunda tabla, en realidad era la identificación de los usuarios de la tabla 1. gracias por su rápida respuesta. - David Addoteye
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas mysql select where or haz tu propia pregunta.
No entiendo su relación entre tablas... ¿user_id es un PK y user_id es un FK con diferente tipo de var? - jcho360
@ jcho360 Tiene razón, las claves y las relaciones no están configuradas correctamente entre estas tablas. Sin embargo, puede obtener los datos que el OP quiere usando su estructura, y también puede obtenerlos si arregla las tablas (he mostrado ambas formas en mi respuesta): Windle
por favor revisa mi respuesta... está funcionando. También se proporciona un enlace con la prueba... - Fahim Parkar