2017-03-26 8 views
0

できるだけ明確に私の問題を語ります。私はOralce SQL Developerでデータベースを作成しており、データベースが作成されたら特定のデータを照会できる必要があります。だからここに私の問題です。2つの列が両方ともFKで、同じPKを参照している場合、2つの列の詳細を表示するには

私は、ゲームで作成されたすべてのアバターの情報を記載したアバターテーブルを持っています。アバターはスーパーアバターに進化し、2人のスーパーアバターは繁殖してメガアバターを作成できます。これらの異なるタイプのアバターはすべて、アバターテーブルにその属性が格納されています。クエリの1つでは、すべての親アバターとメガアバター子供の詳細を取得する必要があります。

これを行うには、単純にFatherID(FK)とMotherID(FK)の両方が同じテーブルにリンクしているSuperAvatarとMegaAvatarの間にリンクテーブルを作成しました。 SuperAvatar.SuperAvID(PK)。リンクテーブルの最後の列は、MegaAvatar.MegaAvID(PK)テーブルにリンクするMegaAvID(FK)です。

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; 

ERD

Screenshot

+0

簡単なルール:*決して* FROM句にカンマを使用しないでください。 *常に*適切で明示的な 'JOIN'構文を使用します。うまくいけば、あなたはあなたのクラスの古くなった古い構文を学んでいないでしょう。 –

答えて

1

この2行は問題がある:

AND MegaAvParents.FatherID=SuperAvatar.SuperAvID 
AND MegaAvParents.MotherID=SuperAvatar.SuperAvID 

は、彼らが意味する、あなただけの同じ父と母を持つMegaAvParentsを照会しています。あなたのデータセットには、FatherID!= MotherIDのMegaAvParentだけがあると思います。 これを修正するには、SuperAvatarとAvatarに2度参加し、適切な別名を付ける必要があります。例:

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; 
+0

ありがとう、私は今あなたの例を私のクエリからより多くの情報を引き出すために使用しています! :D – ACostea

関連する問題