2010-03-12 4 views
1

여러 테이블 (Person, Parents 등)이 포함 된 데이터베이스가 있습니다.Derby에 대한 데이터베이스 쿼리 작성에 도움이 되셨습니까?

Person 테이블에는 특히 ssn, countryofbirth 및 currentcountry와 같은 특정 속성이 있습니다.

부모 테이블을 ssn하고있다 fathersbirthcountry

사람의 사회 보장 번호 (SSN)가 부모의 동일한 사회 보장 번호 (SSN)이다 - 즉, 그들이 연결하는 방법이다.

나는 출생 국가와 동일한 출생 국가를 갖고 있으며 출생 국가와 동일한 현재 국가의 모든 사람들의 SSN을 출력하려고합니다.

SELECT Person.ssn 
FROM Person, Parents 
WHERE fathersbirthcountry = countryofbirth 
AND currentcountry = fathersbirthcountry; 

위의 코드는 작동하지 않는 것 같습니다. 아무도 도와 주실 수 없습니까?

답변

0

Person의 상점을 부모에게 어떻게 저장하는지 언급하지 않습니다. 그래서 당신이 얻을 것이다 Person 테이블에서 MotherId 및 FatherId가 가정합니다 :

Select SSN 
From Person 
Where BirthCountry = (
         Select BirthCountry 
         From Parents 
         Where Person.FatherId = Parents.Id 
         ) 

지금, 이것은 부모 테이블에 BirthCountry과 같은 목록입니다 Person 테이블에 BirthCountry을 가정합니다.

2

개인 레코드와 상위 레코드를 연결하는 조건을 명확히하지 않습니다. 이 예에서는 Person이 FatherSSN이라고하는 추가 필드가 있다고 가정합니다. 92-SQL JOIN 구문을

SELECT Person.SSN 
    FROM Person, Parents 
    WHERE Person.FatherSSN = Parents.SSN 
    AND Person.CountryOfBirth = Parents.FathersBirthCountry 
    AND Person.CurrentCountry = Parents.FathersBirthCountry 
또는

에서 : 그렇다면

SELECT Person.SSN 
    FROM Person INNER JOIN Parents 
    ON Person.FatherSSN = Parents.SSN 
    AND Person.CountryOfBirth = Parents.FathersBirthCountry 
    AND Person.CurrentCountry = Parents.FathersBirthCountry 

두 버전이 동일한 결과 (계획 및 실행)을 수득한다.

마지막으로, 이것이 자신의 데이터베이스 인 경우, 현재 가지고있는 것과 동일한 단일 구조의 구조를 사용하여 모든 세대를 보유한 단일 Person 테이블 만 리팩토링 할 수 있습니다. 재구성을하면 SQL은 다음과 같이 보일 것입니다 :

SELECT P1.SSN 
    FROM Person P1 INNER JOIN Parents P2 
    ON P1.FatherSSN = P2.SSN 
    AND P1.CountryOfBirth = P2.CountryOfBirth 
    AND P1.CurrentCountry = P2.CountryOfBirth 
관련 문제