2015-02-06 47 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