2014-01-17 1 views
0

여기에 SQL이 있는데 'aal_county_zip'에는 2 개의 우편 번호에 대한 항목이 있지만 'us_zip'에는 15 개의 우편 번호가 있습니다. 요구 사항은 'aal_county_zip'의 데이터가있는 행이 2 개만있는 15 개의 행을 얻는 것입니다. 그것은 정상 결합처럼 작동합니다. 이 작업을 수행하기 위해 어떻게 SQL/테이블 구조를 변경할 수 있습니까? 또한 아래에 설명 된 조건을 추가하고 싶습니다.sql은 제한 열을 사용하여 외부 조인을 남겼습니다.

SELECT DISTINCT a.zcta5ce10 AS zipcode, 
       c.report_year, 
       c.aal 
FROM aal_county_zip c 
     RIGHT OUTER JOIN us_zip a 
        ON (c.zip = a.zcta5ce10) 
WHERE Lower(c.name) = Lower('alachua') 
--and c.report_year=2009 
ORDER BY c.report_year DESC 
+0

"작동하지 않음"(결과가 충분하지 않거나 결과가 너무 많거나 올바르지 않음 등)의 의미를 설명하십시오. – dasblinkenlight

답변

1

쿼리의 WHERE Lower(c.name) = Lower('alachua')c.nameNULL이 아니므로 외부 조인을 내부 조인으로 바꿉니다.

대신 왼쪽 결합을 사용하는 것이 더 자연 스럽기 때문에 고려해보십시오. 그리고 어떤 경우에도 where 조인이 아닌 조인 절에 조건을 적용하여이 조인을 내부 조인으로 바꾸지 않도록하십시오.

차입 및 개정 @의 dasblinkenlight의 쿼리 : 사용자 수정해야

SELECT DISTINCT 
    a.zcta5ce10 AS zipcode 
, c.report_year 
, c.aal 
FROM us_zip a 
LEFT OUTER JOIN aal_county_zip c 
     ON c.zip = a.zcta5ce10 
    AND c.report_year=2009 
    AND LOWER(c.name) = LOWER('alachua') 
ORDER BY c.report_year DESC 

문제를 "두 행이 반환". 즉, 검색어에 일부 추가 기준 (및 주문 기준)이 us_zip에 누락되었을 수 있습니다.

+0

감사합니다. 작동했습니다. – patb23

+0

@ patb23 어떤 의미에서 이상하게 보입니다. 당신은 논평 한 선에 관하여 넋두리하고 있었다. 앞으로 귀하의 질문을 더 잘 테스트하고 알려주십시오. – SQB

0
SELECT DISTINCT a.zcta5ce10 AS zipcode, 
       c.report_year, 
       c.aal 
FROM aal_county_zip c 
     RIGHT OUTER JOIN us_zip a 
        ON (c.zip = a.zcta5ce10) 
WHERE Lower(c.name) = Lower('alachua') 
    AND COALESCE(c.report_year, 2009)=2009 
ORDER BY c.report_year DESC 

또는

SELECT DISTINCT a.zcta5ce10 AS zipcode, 
       c.report_year, 
       c.aal 
FROM aal_county_zip c 
     RIGHT OUTER JOIN us_zip a 
        ON (c.zip = a.zcta5ce10 AND c.report_year=2009) 
WHERE Lower(c.name) = Lower('alachua') 
ORDER BY c.report_year DESC 

당신은 RIGHT OUTER JOIN을하고있는, 그래서 당신의 첫 번째 테이블, aal_county_zip는 널 (null)을 포함 할 수 있습니다. 따라서 COALESCE을 사용하여 널 (null)을 설명하거나 참여 조건의 일부로 만드십시오.

+0

둘 다 정상 결합 (2 행 반환)과 같은 결과를 나타냅니다. 'aal_county_zip'에는 2 개의 zip에 대한 데이터 만 있지만 'us_zip'에는 15 개의 우편 번호가 있으며, 내 외부 조인 (주석 된 행 포함)이 올바르지 않은 것으로 나타났습니다. – patb23

관련 문제