2015-02-06 49 views
0

我有三个表,如t_zip5,t_dtv_cnty_eligibility,t_user_activity。 我将根据countyId从t_zip5表中提取所有邮编。SQL查询返回无效行

这些zip代码将在t_user_activity表的zip列中查找。如果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行作为与这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替换为左连接,看看会发生什么! – jarlh 2015-02-06 10:17:13

回答

2

尝试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行返回。由于T_DTV_CNTY_ELIGIBILITY表的DTV_eligible列的值为'Y'和'N'。所以,而不是40行,我得到80行。请再帮我一次 – 2015-02-06 10:33:23

+0

@PriyaViji - 哪一列有这些值,'DTV_eligible'?您将其包括在选择列表中,因此您期望看到两个值,并因此看到两个记录。如果你只需要一个,那么在外连接条件中包含一个Y或N的过滤器;但是在选择列表中没有多少意义? – 2015-02-06 10:38:24

+0

@AlexPoole - 如果我根据Y或N过滤,我不会得到真正的结果。是否有其他方法可以克服这种情况 – 2015-02-06 10:40:41