0

私は2つのテーブルを持っています

ユーザー: (ID、名前)

関係: (user_id、relation_id)

User_id と relationship_id はどちらもテーブルの IDusersです。

私が欲しいのは、特定のユーザーと友達になっているすべてのユーザーを回復することです。

そして、ここに私のSQLコマンドがあります:それは動作しません:

SELECT *
FROM users
NATURAL JOIN relations
WHERE user_id IN (SELECT id FROM users WHERE name='John doe');

私たちを手伝ってくれますか?

4

7 に答える 7

4
SELECT users.*
FROM relations
INNER JOIN users
  ON relations.relation_id = users.id
WHERE relations.user_id = 12345;

例で行ったように、サブクエリで id を取得することもできます。

WHERE relations.user_id IN (SELECT id FROM users WHERE name='John doe');
于 2012-04-20T11:41:02.370 に答える
2

人が持っているすべての関係を取得するには、次のクエリが機能します。

SELECT * FROM users us JOIN 関係 re ON us.id = re.relation_id WHERE re.user_id = ( SELECT id FROM users WHERE name = 'John doe' )

于 2012-04-20T11:56:45.547 に答える
1
SELECT friend.*
FROM users AS friend
  JOIN relations AS r
    ON r.relation_id = friend.id
  JOIN users AS u 
    ON u.id = r.user_id
WHERE u.name = 'John doe' ;
于 2012-04-20T11:45:53.360 に答える
1

友達はrelation_idが同じ人?

SELECT a.name FROM users a JOIN relations b on a.id = b.user_id
WHERE b.relation_id in 
(select relation_id from relations where id = 'userid of user you are looking for') 
AND a.id !=  'userid of user you are looking for'

ロジックが異なる場合は、それがどのように機能しているか教えてください

于 2012-04-20T11:48:56.700 に答える
1

これを試して

SELECT * FROM users as a 
JOIN relations as b on a.id = b.user_id 
WHERE b.user_id IN (SELECT id FROM users WHERE name='John doe')
于 2012-04-20T11:39:05.183 に答える
1
SELECT user_id
FROM relations re
JOIN users us
ON us.id = re.user_id
WHERE relation_id = (
    SELECT id
    FROM users
    WHERE name = 'John Doe'
)

補足: NATURAL JOIN2 つのテーブルに同じ名前と型を持つ列がないため、ここでは使用できません。

于 2012-04-20T11:40:17.940 に答える
1

これは、探している userId で関係テーブルをクエリするだけの問題ではありませんか?

select * 
from relations
where  user_id = @IdYouArelookingFor or relation_id = @IdYouArelookingFor
于 2012-04-20T11:42:59.733 に答える