2011-01-06 3 views
0

J'ai 3 tables et je rejoins ces 2 tables comme suit:Oracle rejoindre question

SELECT EMP.FNAME,EMP.LNAME,EMP.AGE,EMPD.TQ,EMPD.TA,CTY.CITY_NAME FROM 
EMPLOYEE EMP,EMPLOYEE_DETAIL EMPD, CITY CTY 
WHERE EMP.EMP_ID=EMPD.EMP_ID AND EMPD_CITY_ID=CTY.CITY_ID 

Je veux afficher les enregistrements, même si l'enregistrement de la ville n'est pas dans le tableau de la ville. Par exemple. Si l'enregistrement City_ID pour say 10 n'est pas dans la table City mais qu'il y a un enregistrement de détail employé avec City_id 10, il doit afficher City_name comme null au lieu de ne pas afficher l'enregistrement du tout.

apprécions votre aide

Répondre

2

Vous devez utiliser une jointure gauche:

SELECT EMP.FNAME, 
       EMP.LNAME, 
       EMP.AGE, 
       EMPD.TQ, 
       EMPD.TA, 
       CTY.CITY_NAME 
    FROM EMPLOYEE EMP INNER JOIN EMPLOYEE_DETAIL EMPD 
     ON EMP.EMP_ID=EMPD.EMP_ID LEFT JOIN CITY CTY 
    ON EMPD_CITY_ID=CTY.CITY_ID 

Une version moins détaillée (spécifique à Oracle):

SELECT EMP.FNAME, 
      EMP.LNAME, 
      EMP.AGE, 
      EMPD.TQ, 
      EMPD.TA, 
      CTY.CITY_NAME 
    FROM EMPLOYEE EMP, 
     EMPLOYEE_DETAIL EMPD, 
      CITY CTY 
WHERE EMP.EMP_ID=EMPD.EMP_ID 
    AND EMPD_CITY_ID=CTY.CITY_ID(+)