2015-02-06 3 views
0

У меня есть три таблицы типа t_zip5, t_dtv_cnty_eligibility, t_user_activity. Я буду извлекать все zipcodes из t_zip5 таблиц на основе countyId.sql-запрос, возвращающий недопустимые строки

Эти zipcodes будут искать в zip-столбце таблицы t_user_activity. Если сопоставления zip мне придется извлекать столбцы cuid и actvty, мне придется оставить эти столбцы пустыми или пустыми для почтового индекса таблицы t_zip5.

я написал ниже запрос:

select distinct tz.zip,td.DTV_eligible,tu.cuid,tu.actvty_date 
from T_ZIP5 tz,T_DTV_CNTY_ELIGIBILITY td,T_USER_ACTIVITY tu 
where tz.FIPS_CNTY='51001' 
and tz.FIPS_CNTY=td.CNTY_FIPS 
and tz.zip=tu.zip 

Этот запрос обеспечивает только совпавшие строки почтовый индекс. Я должен получать строки для других почтовых индексов графства, даже если они не совпадают.

Адрес: округ 51001 имеет 40 почтовых индексов. Вышеприведенный запрос привел к мне только 3 строки, так как запись zip соответствовала этим тминам.

Пожалуйста, помогите мне решить эту проблему.

Таблица структуры: выходные

desc t_zip5 
Name    Null  Type   
----------------- -------- ------------ 
ZIP    NOT NULL VARCHAR2(5) 
FIPS_CNTY     VARCHAR2(5) 
CITY_NAME   NOT NULL VARCHAR2(50) 
STATE    NOT NULL VARCHAR2(2) 
RATE_CENTER_NAME   VARCHAR2(10) 
RATE_CENTER_STATE   VARCHAR2(2) 

desc T_DTV_CNTY_ELIGIBILITY 
Name   Null  Type   
------------- -------- ------------ 
CNTY_FIPS  NOT NULL VARCHAR2(5) 
ZIP_CODE  NOT NULL VARCHAR2(5) 
DTV_ELIGIBLE   CHAR(1)  
USER_MODIFIED   VARCHAR2(10) 
CREATED_DATE   DATE   
MODIFIED_DATE   DATE   

desc t_user_activity 

    Name  Null Type   
    ----------- ---- ------------- 
    ACTVTY_DATE  DATE   
    ACTVTY_NAME  VARCHAR2(20) 
    ACTVTY_DSCR  VARCHAR2(200) 
    CUID    VARCHAR2(10) 
    ZIP    VARCHAR2(5) 

Пример:

ZIP DTV_Eligible CUID MODIFIED_DATE 
----------- ---- ---------------------- 
1111  Y   xyz 05-02-2015 
1111  N   xyz 05-02-2015 
2222  Y   abc 02-02-2015 
2222  N   abc 02-02-2015 
+3

Заменить JOIN LEFT JOIN и посмотреть, что произойдет! – jarlh

ответ

2

Try LEFT JOIN. Внутреннее соединение возвращает только согласованные значения.

select distinct tz.zip,td.DTV_eligible,tu.cuid,tu.actvty_date 
from T_ZIP5 tz left join T_DTV_CNTY_ELIGIBILITY td on tz.FIPS_CNTY=td.CNTY_FIPS 
left join T_USER_ACTIVITY tu on tz.zip=tu.zip 
where tz.FIPS_CNTY='51001' 
+0

Теперь я получаю 80 строк. Поскольку столбец DTV_eligible таблицы T_DTV_CNTY_ELIGIBILITY имеет значения «Y» и «N». Итак, вместо 40 строк я получаю 80 строк. Пожалуйста, помогите мне снова –

+0

@PriyaViji - в какой колонке есть эти значения, 'DTV_eligible'? Вы включаете это в список выбора, так что в данный момент вы ожидаете увидеть оба значения и, следовательно, обе записи. Если вы хотите только один, включите фильтр для Y или N во внешнее условие соединения; но тогда в списке выбора не так много смысла? –

+0

@AlexPoole - Если я фильтрую на основе Y или N, я не получу истинных результатов. Есть ли другой способ преодолеть эту ситуацию? –

Смежные вопросы