2010-03-12 26 views
1

我有一個包含多個表(個人,家長等)的數據庫幫助編寫德比數據庫查詢?

人表具有某些屬性,特別是ssn,countryofbirth和currentcountry。

父母表已經爲ssn,並fathersbirthcountry

親自到SSN是父母同SSN - 那就是他們是如何聯繫在一起的。

我試圖輸出誰具有相同的countryofbirth作爲他們fathersbirthcountry也是所有人的攻擊核潛艇具有相同currentcountry爲fathersbirthcountry。

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

上面似乎沒有工作,任何人都可以請幫我嗎?

回答

0

你永遠不會提到Person如何存儲它對父母的引用。我假設有一個MotherId和FatherId Person表中,所以你會得到:

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

現在,這種假設BirthCountry Person表中是在父母表中的同一列表,BirthCountry。

2

你不明確什麼條件鏈接人記錄與父記錄。對於這個例子,我將假定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 JOIN語法:

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

兩個版本應產生相同的結果(和執行計劃)。

最後,如果這是你自己的數據庫,它可以很容易和盈利進行重構,系統只會顯示一個人用表完全相同的結構爲單桌,你現在拿着萬代。如果你作出這樣的調整,你的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