2010-03-12 4 views
1

У меня есть база данных, содержащая несколько таблиц (Person, Parents и т. Д.)Помогите записать запросы базы данных для дерби?

Таблица лиц имеет определенные атрибуты, в частности ssn, countryofbirth и currentcountry.

Родители таблица Ssn и fathersbirthcountry

ПЛА в Person тот же ПЛА в детстве - то есть, как они связаны между собой.

Я пытаюсь вывести SSN всех людей, имеющих ту же самую страну рождения, что и их родная страна, и также иметь ту же самую страну, что и родство с родителями.

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

вышеупомянутое не работает, может ли кто-нибудь помочь мне?

ответ

0

Вы никогда не упоминаете, как люди хранят свою ссылку на Родителей. Я предполагаю, есть MotherId и FatherId в таблице Person, так что вы получите:

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

Теперь, это предполагает, что BirthCountry в таблице Person тот же список, как BirthCountry в таблице родителей.

2

Вы не уточните, какое условие связывает запись Person с родительской записью. В этом примере я собираюсь предположить, что Person содержит дополнительное поле, которое не указано вами, называется FatherSSN. Если это так:

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

или в SQL-92 ПРИСОЕДИНЯЙСЯ синтаксис:

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 

 Смежные вопросы

  • Нет связанных вопросов^_^