2010-06-17 10 views
9

Tengo dos tablas:mysql externa izquierda

  1. employee con campos employee_id, nombre, MiddleName, apellido
  2. timecard con campos employee_id, tiempo en, tiempo de espera, tc_date_transaction

Quiero seleccionar todos los registros de empleados que tienen el mismo employee_id con timecard y la fecha es igual a la fecha actual. Si no hay registros iguales a la fecha actual, regrese también los registros del empleado incluso sin entrada de tiempo, tiempo de espera y tc_fecha_transacción.

tengo una consulta como este resultado

SELECT * 
    FROM employee LEFT OUTER JOIN timecard 
     ON employee.employee_id = timecard.employee_id 
WHERE tc_date_transaction = "17/06/2010"; 

debe desea:

 
employee_id | firstname | middlename | lastname | time-in | time-out | tc_date_transaction 
------------------------------------------------------------------------------------------ 
    1  | john  | t   | cruz  | 08:00 | 05:00 | 17/06/2010  
    2  | mary  | j   | von  | null | null  | null 

Respuesta

18

que está filtrando tc_date_transaction que filtra todos los valores nulos en este campo, incluso los generados por la combinación externa y por lo tanto, frustra su propósito. Mueva el filtro "tc_date_transaction =" 17/06/2010 "" a la cláusula join y funcionará.

SELECT * 
    FROM employee LEFT OUTER JOIN timecard 
     ON employee.employee_id = timecard.employee_id and tc_date_transaction = "17/06/2010"; 

o escribir

SELECT * 
    FROM employee LEFT OUTER JOIN timecard 
     ON employee.employee_id = timecard.employee_id 
    where (tc_date_transaction = "17/06/2010" or tc_date_transaction is null); 
+0

hi Loxley, me trataron su código, pero hubo un error, "expresión de combinación no es compatible" TNX – tirso

+0

He actualizado mi respuesta para reflejar este MY- Problema de SQL. – Loxley

+0

hi Loxley, su código está trabajando. tnx – tirso

Cuestiones relacionadas