2011-01-06 3 views
0

У меня есть 3 таблицы, и я вхожу в эти 2 таблицы следующим образом: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 

Я хочу, чтобы отобразить записи, даже если город запись не в таблице CITY. Напр. если запись City_ID для say 10 не находится в таблице City, но есть запись о деталях сотрудника с City_id 10, она должна отображать City_name как null, а не вообще не показывать запись.

Цените вашу помощь

ответ

2

Вы должны использовать левое соединение:

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 

менее подробную версии (специфичную для 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(+)    
Смежные вопросы