2014-07-17 4 views
0

J'ai deux tables, dis Employees et Date de Joining. Maintenant, je veux joindre les deux tables en fonction de l'ID de l'employé, mais je veux afficher la liste complète des employés, peu importe si Joining date est enregistrée ou not..Here sont les deux tablesJoindre deux tables dans mysql avec la condition where clause

Employee 
John       
Paul       
George 
Ringo 

DOJ 
21/05/1998 
23/02/2006 

EmpIds étant 1,2,3,4 pour John, Paul, George, Ringo respectivement

je besoin à la fois les tables à assembler et les valeurs de George et Ringo peuvent être nulles mais ma principale préoccupation est que je devrais pouvoir filtrer le DOJ. S'il vous plaît regardez ci-dessous.

SELECT e.empName, d.DOJ, e.empId 
FROM employee AS e 
LEFT JOIN doj AS d ON e.empId = d.empId 
WHERE d.doj BETWEEN STR_TO_DATE('27/04/2000', '%d/%m/%Y') 
    AND STR_TO_DATE('27/04/2014', '%d/%m/%Y')) 

Maintenant, quand je lance cette requête que je reçois tous les enregistrements filtrés par les dates mais j'ai besoin tous les noms des employés non seulement ceux filtrés par clause where (avec DOJ comme nul que je peux remplacer comme « non disponible "). J'aimerais qu'il y ait une option de jointure externe complète dans mysql.

+1

déplacez la condition where pour rejoindre 'on' –

+0

À votre dernière phrase: http://www.xaprb.com/blog/2006/05/26/how-to-write-full-outer-join-in- mysql/ – Fallenreaper

Répondre

0

Essayez cette requête non testé:

SELECT e.empName, d.DOJ, e.empId 
    FROM employee AS e 
    left JOIN doj AS d ON e.empId = d.empId 
and d.doj between STR_TO_DATE('27/04/2000', '%d/%m/%Y')and STR_TO_DATE('27/04/2014', '%d/%m/%Y')and STR_TO_DATE('27/04/2014', '%d/%m/%Y')) 
+0

merci beaucoup cela a fonctionné :) et aussi pouvez-vous m'aider à expliquer pourquoi mysql ne supporte pas les jointures externes complètes? –

+0

@KaranRamesh Regardez [ici] (http://dev.mysql.com/worklog/task/?id=1604) peut-être que cela aide. – Jens

0

je suppose que vous avez tout droit dans votre requête en dehors de votre état où. En fonction de votre état, le résultat sera entre la date du 27/04/2000 et le 27/04/2014 , donc si la valeur de la date est "NULL", elle ne sera pas affichée.

Essayez la même requête sans cette condition de date, vous pourriez obtenir le résultat.