0

mysqlで自己多対多の関係を照会するのにいくつか問題があります。PersonテーブルとFriendshipテーブルを取得しました

人の
pid | 名前 | 年齢
1 ジミー 18
2 ルーカス 25
3 マリー 12
4 マリー 40
5 ジョン 30

友情
pid | pId2
1 3
2 3
4 1
5 3


だから私はマリーの友達が何であるかを確認する必要があります(正解:ルーカスとジョン)

次のクエリで、pid で答えを得ました

SELECT p.name
FROM Person p
WHERE EXISTS(SELECT NULL
    FROM Friendship f
    WHERE p.pid = f.pid
    AND (f.pid2 = 4 OR f.pid2 = 3))
OR EXISTS(SELECT NULL
    FROM Friendship f
    WHERE p.pid = f.pid2
    AND (f.pid = 4 OR f.pid = 3))  

しかし、名前でクエリを実行する必要がある場合はどうすればよいですか?次の方法は機能しません

SELECT p.name
FROM Person p
WHERE EXISTS(SELECT NULL
    FROM Friendship f
    WHERE p.pid = f.pid
    AND f.pid2 = (SELECT pid FROM Person WHERE name = 'Marie'))
OR EXISTS(SELECT NULL
    FROM Friendship f
    WHERE p.pid = f.pid2
    AND f.pid = (SELECT pid FROM Person WHERE name = 'Marie')) 

助けてくれてありがとう

4

1 に答える 1

0

私はJOINを介してそれを行います。

SELECT fr.name FROM Person fr INNER JOIN Friendship ON(fr.pid = Friendship.pid2) INNER JOIN Person p ON(Friendship.pid = p.pid) WHERE p.name = 'Marie';

ただし、JOIN とサブセレクトを使用してこれを行うこともできます。

SELECT name FROM Person INNER JOIN Friendship ON(Person.pid = Friendship.pid2) WHERE Friendship.pid IN (SELECT pid FROM Person WHERE name = 'Marie'); 
于 2011-03-30T02:28:17.363 に答える