sql查询返回无效行

时间:2015-02-06 10:16:22

标签: sql oracle

我有三个表,如t_zip5,t_dtv_cnty_eligibility,t_user_activity。 我将根据countyId从t_zip5表中获取所有zipcodes。

这些邮政编码将在t_user_activity表的zip列中查找。如果zip匹配,我将需要获取cuid和actvty列,否则我必须将这些列保留为空或t_zip5表的邮政编码为空。< / p>

我写了以下查询:

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

此查询仅提供匹配的邮政编码行。我必须为县的其他邮政编码获取行,即使它不匹配。

Ex:County 51001有40个邮政编码。上面的查询导致我只有3行作为这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

1 个答案:

答案 0 :(得分:2)

尝试左连接。内部联接仅返回匹配的值。

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'