SQL查询返回无效行
我有三个表,如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
尝试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'
现在我得到80行返回。由于T_DTV_CNTY_ELIGIBILITY表的DTV_eligible列的值为'Y'和'N'。所以,而不是40行,我得到80行。请再帮我一次 – 2015-02-06 10:33:23
@PriyaViji - 哪一列有这些值,'DTV_eligible'?您将其包括在选择列表中,因此您期望看到两个值,并因此看到两个记录。如果你只需要一个,那么在外连接条件中包含一个Y或N的过滤器;但是在选择列表中没有多少意义? – 2015-02-06 10:38:24
@AlexPoole - 如果我根据Y或N过滤,我不会得到真正的结果。是否有其他方法可以克服这种情况 – 2015-02-06 10:40:41
将JOIN替换为左连接,看看会发生什么! – jarlh 2015-02-06 10:17:13