Sql 如果两列都是FK,引用同一主键,如何显示它们的详细信息

Sql 如果两列都是FK,引用同一主键,如何显示它们的详细信息,sql,oracle,Sql,Oracle,我会尽量把我的问题说清楚。我正在Oralce SQL Developer for school中创建一个数据库,我们必须能够在创建数据库后查询特定数据。这就是我的问题 我有一个头像表,列出了游戏中创建的所有头像的信息,头像可以进化成超级头像,两个超级头像可以繁殖来创建一个超级头像。所有这些不同类型的化身都将其属性存储在化身表中。其中一个查询要求我检索所有父化身及其超级化身子化身的详细信息 为此,我在SuperAvatar和MegaAvatar之间创建了一个链接表,其中FatherID FK和Mo

我会尽量把我的问题说清楚。我正在Oralce SQL Developer for school中创建一个数据库,我们必须能够在创建数据库后查询特定数据。这就是我的问题

我有一个头像表,列出了游戏中创建的所有头像的信息,头像可以进化成超级头像,两个超级头像可以繁殖来创建一个超级头像。所有这些不同类型的化身都将其属性存储在化身表中。其中一个查询要求我检索所有父化身及其超级化身子化身的详细信息

为此,我在SuperAvatar和MegaAvatar之间创建了一个链接表,其中FatherID FK和MotherID FK都链接到同一个表;SuperAvatar.SuperAvID PK。链接表中的最后一列是MegaAvID FK,它链接到MegaAvatar.MegaAvID PK表

我将包括我的ERD的图片和我运行查询的屏幕截图

当我编写以下查询时,没有收到任何结果。为什么会这样,有人能看出我错在哪里吗?提前谢谢

SELECT AvatarName AS "Fathers", AvatarName AS "Mothers"

FROM MegaAvatar, MegaAvParents, SuperAvatar, Avatar

WHERE MegaAvatar.MegaAvID=MegaAvParents.MegaAvID 
AND MegaAvParents.FatherID=SuperAvatar.SuperAvID 
AND MegaAvParents.MotherID=SuperAvatar.SuperAvID 
AND SuperAvatar.SuperAvID=Avatar.AvatarID;

这两条线有问题:

AND MegaAvParents.FatherID=SuperAvatar.SuperAvID 
AND MegaAvParents.MotherID=SuperAvatar.SuperAvID
他们的意思是,你只是在询问父母是否有相同的父亲和母亲。我猜在您的数据集中只有父亲ID为的父母妈妈。 要解决这个问题,你需要加入SuperAvatar和Avatar两次,并提供适当的别名。例如:

SELECT father.AvatarName AS "Fathers", mother.AvatarName AS "Mothers"

FROM MegaAvatar, MegaAvParents, SuperAvatar sFather, SuperAvatar sMother, Avatar father, Avatar mother

WHERE MegaAvatar.MegaAvID = MegaAvParents.MegaAvID
AND MegaAvParents.FatherID = sFather.SuperAvID
AND MegaAvParents.MotherID = sMother.SuperAvID
AND sFather.AvatarID = father.AvatarID
AND sMother.AvatarID = mother.AvatarID;

简单规则:在FROM子句中不要使用逗号。始终使用正确的显式联接语法。希望您在课堂上没有学习过时的语法。非常感谢您,我现在使用您的示例从我的查询中获取更多信息!:D