2010-06-17 5 views
9

J'ai deux tables:mysql gauche jointure externe

  1. employee avec des champs employee_id, prenom, middleName, LASTNAME
  2. timecard avec des champs employee_id, le temps en, time-out, tc_date_transaction

Je veux sélectionner tous les enregistrements d'employés qui ont le même id_utilisateur avec la fiche de présence et la date est égale à la date actuelle. Si aucun enregistrement ne correspond à la date actuelle, renvoyez également les enregistrements de l'employé même sans time-in, timeout et tc_date_transaction.

J'ai une requête comme ce

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

résultat devrait comme ceci:

 
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 

Répondre

18

Vous filtrez tc_date_transaction qui filtre toutes les valeurs nulles dans ce domaine, même ceux générés par la jointure externe et par conséquent vainc son but. Déplacez le filtre "tc_date_transaction =" 17/06/2010 "" dans la clause de jointure et cela fonctionnera.

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

ou écrire

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

salut Loxley, J'ai essayé votre code, mais il y avait une erreur, "expression de jointure est pas pris en charge" TNX – tirso

+0

je mis à jour ma réponse pour refléter cette MY- Problème SQL. – Loxley

+0

salut loxley, votre code fonctionne. tnx – tirso

Questions connexes