2015-02-03 2 views
0

안녕하세요 Oracle 데이터베이스의 세 가지 테이블을 통과하여 데이터를 가져와야한다는 요구 사항이 있습니다.여러 행에서 데이터를 가져 오기위한 SQL 쿼리

저는 countyId를 전달하여 우편 번호 테이블에서 모든 우편 번호를 가져옵니다. ZIP 테이블에서 검색된 zipCode 수에 따라 각 우편 번호를 전달하여 다른 테이블에서 확인합니다. 이 zipCode를 기반으로 ACTIVITY 테이블은 해당 zipCode 행을 반환합니다.

어떻게 이것을 달성하기 위해 SQL 쿼리를 작성할 수 있습니까? 나는 가상 테이블 생성 개념이 있다는 소식을 들었지만, 그것에 대해서는 잘 모른다.

수준 높은 의견을 제공해주십시오. 어떻게 진행할 수 있습니까?

나는 아래의 쿼리를 시도했지만 결과가 검색되지 않습니다 - 0 행

select T_ZIP5.zip, 
    T_DTV_CNTY_ELIGIBILITY.DTV_eligible, 
    T_USER_ACTIVITY.cuid, 
    T_USER_ACTIVITY.actvty_date 
from T_ZIP5 
join T_DTV_CNTY_ELIGIBILITY 
    on T_ZIP5.FIPS_CNTY=T_DTV_CNTY_ELIGIBILITY.CNTY_FIPS 
join T_USER_ACTIVITY 
    on T_DTV_CNTY_ELIGIBILITY.zip_code=T_USER_ACTIVITY.zip 
where T_ZIP5.FIPS_CNTY='53033' 

테이블 구조 :

desc t_zip5 

----------------- -------- ------------ 
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 

------------- -------- ------------ 
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 

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

53033이 countyCode

군을 위해 우편 번호입니다 T_USER_ACTIVITY에 존재 표. 그러나 주어진 카운티 53033에 대한 T_ZIP5 테이블에는 여러 개의 zip 항목이 있습니다.

+1

체크 아웃 해결하고 가입하세요. (누가 가상 테이블을 말 했나요?) – jarlh

+0

테이블 구조는 무엇이며 몇 가지 샘플 데이터를 보여줄 수 있습니까? 53033이 카운티 코드입니까, 아니면 우편 번호입니까? 항상 활동 데이터가있을 것이며 그렇지 않은 경우 어떻게해야합니까? –

+0

Alex Poole : 53033은 countycode입니다. 테이블 구조도 추가했습니다. 이 문제에 대해 도와주세요 –

답변

0

이 항목에 대해 조인 조회를 사용할 수 있습니다. 세 테이블이 있다고 가정하십시오. 국가 (country_id) 2. 우편 번호 (zip_id, country_id, 우편 번호) 3. test (test_id, zipcode);

그래서 당신이 왼쪽 사용할 수 있습니다 여기에

SELECT zip.zipcode 
    FROM country 
    JOIN zip on zip.country_id = country.country_id 
    JOIN test on test_id.zipcode = zip.test_id 
    Where country.country_id = 10 

같은 쿼리를 마우스 오른쪽 현명한 당신은 여러 기록을 결과를 얻을 귀하의 기록의 필요에 따라 결합하면 하나 개의 항목이 다른 것 우편 번호.

0

이 쿼리는 SELECT를 문제 ..

select unique T_ZIP5.zip,T_ZIP5.FIPS_CNTY,T_DTV_CNTY_ELIGIBILITY.DTV_eligible, 
T_USER_ACTIVITY.cuid,T_USER_ACTIVITY.actvty_date ,T_DTV_CNTY_ELIGIBILITY.zip_code from T_ZIP5,T_DTV_CNTY_ELIGIBILITY,T_USER_ACTIVITY where T_ZIP5.FIPS_CNTY='53033'and T_ZIP5.FIPS_CNTY=T_DTV_CNTY_ELIGIBILITY.CNTY_FIPS and T_ZIP5.zip=T_USER_ACTIVITY.zip (+) 
+0

* 따라서 활동 데이터가 없습니다. 오라클의 구식 조인 대신 ANSI JOIN 표기법을 사용하는 것이 좋습니다. 특히 외부 조인의 경우 더욱 명확합니다. –

관련 문제