我会尽可能清楚地说出我的问题。我正在学校的Oralce SQL Developer中创建一个数据库,我们必须能够在创建数据库后查询特定数据。所以这是我的问题;
我有一张阿凡达表,其中列出了游戏中创建的所有头像的信息,头像可以演变为超级头像,两个超级头像可以繁殖以创建超级头像。所有这些不同类型的头像都将其属性存储在头像表中。其中一个查询要求我检索所有父级头像及其Mega Avatar孩子的详细信息。
为此,我在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;
答案 0 :(得分:1)
这两行存在问题:
AND MegaAvParents.FatherID=SuperAvatar.SuperAvID
AND MegaAvParents.MotherID=SuperAvatar.SuperAvID
他们的意思是,您只询问拥有相同父亲和母亲的MegaAvParents。我猜你的数据集只有MegaAvParents,其中的是FatherID!= MotherID。 要解决此问题,您需要两次加入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;