我有一个包含多个表(人, 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/

10-12 02:07