2010-06-03 6 views
3

J'ai une table qui contient UserId & ses amis Id comme:MySQL: INNER JOIN

---------------------------------------------- 
UserFriendsId | UserId | FriendId 
---------------------------------------------- 
    1     1    2 
---------------------------------------------- 
    2     1    3 
---------------------------------------------- 
    3     2    1 
---------------------------------------------- 
    4     2    3 
---------------------------------------------- 

Ces données de tableau montre que l'utilisateur-1 & utilisateur-2 amis & ils ont aussi frndship User-3 . Maintenant, je veux trouver un ami commun (s) parmi UserId 1 & UserId 2 pour exemple: Dans Sentance ma requête est: User 1 & utilisateur 2 ont 1 ami commun friendID 3.

Pour cela, j'utilisé requête SQL pour INNER JOIN:

SELECT t1.* 
    FROM userfriends t1 
INNER JOIN userfriends t2 
    ON t1.FriendId = t2.FriendId 
WHERE t1.UserId = 2 

Mais de renvoyer le résultat nécessaire ..

Répondre

1
select * 
    from MyTable as A 
inner join MyTable as B 
    on  (A.UserID = 1 and B.UserID = 2) 
     and (A.FriendID = B.FriendID) 

édité

-1

S'il vous plaît essayer cette

select u1.FriendId 
from userfriends u1 
inner join userfriends u2 on u1.FriendId = u2.FriendId 
where u1.UserId = 1 and u2.UserId = 2 
+0

-1 indique cet utilisateur 1 deux fois! – lexu

+0

Je ne comprends pas. Quel est le probleme avec ca. – Sujee

+0

@Sujee: Voir ma réponse à votre commentaire ci-dessous ma réponse .. Je supprime le bas-vote. – lexu

0

Essayez cette requête (très similaire à th autres posté)

SELECT t1.UserID,T2.userID,T1.FriendID 
    FROM userfriends t1 
    JOIN userfriends t2 
    ON  (t1.FriendId = t2.FriendId) 
     and (T1.userID <>T2.userID) 
WHERE t1.UserId = 2 
    and T2.userId=1 

Prenez garde que ce rapporte deux fois par la chaîne d'amitié une fois que vous supprimez les ID absolus. Pour éviter que je demande que T1.UserID soit plus petit que T2.userID:

SELECT t1.UserID,T2.userID,T1.FriendID 
    FROM userfriends t1 
    JOIN userfriends t2 
    ON  (t1.FriendId = t2.FriendId) 
     and (T1.userID < T2.userID) 
+0

Comment pensez-vous qu'il va rapporter deux fois? Vérifiez la clause 't1.UserId = 2 et T2.userId = 1'. La vérification de (T1.userID T2.userID) 'est inutile. – Sujee

+0

@Sujee: BANG (la main touche la tête.) ** Vous avez raison ** Je pensais trop à propos du cas général! Mes excuses! – lexu

+0

Pas de problème @lexu. Parfois cela m'arrive aussi! – Sujee

0
SELECT table1.name, table2.salary 
    FROM employee AS table1 INNER JOIN info AS table2 ON table1.name = table2.name; 
Questions connexes