我有一个包含多个表(人, parent 等)的数据库
人员表具有某些属性,尤其是ssn,出生国家和当前国家。
parent 表中有ssn,并且祖国
Person中的ssn与Parents中的ssn相同-这就是它们的链接方式。
我正在尝试输出所有具有与其出生国家相同的出生国家,并且也具有与该出生国家相同的当前国家的所有人的SSN。
SELECT Person.ssn
FROM Person, Parents
WHERE fathersbirthcountry = countryofbirth
AND currentcountry = fathersbirthcountry;
上面的方法似乎无效,有人可以帮我吗?
最佳答案
您不清楚不清楚什么条件将个人记录与父记录联系起来。在此示例中,我将假设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
这两个版本应产生相同的结果(和执行计划)。
最后,如果这是您自己的数据库,则可以轻松而有利地进行重构,使其仅包含一个拥有所有世代的单个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
关于derby - 帮助编写关于derby的数据库查询?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2430132/