2010-06-03 3 views
3

У меня есть таблица, которая содержит UserId & его друзей Id как:MySQL: INNER JOIN

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

Эти данные таблицы видно, что User-1 & User-2 друг & они также имеют frndship с User-3 , Теперь я хочу, чтобы найти общий друг (ы) среди USERID 1 & UserId 2 для, например: В Сентансе мой запрос: Пользователь 1 & Пользователя 2 имеет 1 общего друг FriendId 3.

Для этого я использовал SQL запрос для INNER JOIN:

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

Но не возвращает нужный результат ..

ответ

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

отредактировал

-1

Пожалуйста, попробуйте это

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 этом сообщает пользователь 1 дважды! – lexu

+0

Не понимаю. Что не так с этим. – Sujee

+0

@Sujee: Посмотрите мой ответ на свой комментарий ниже моего ответа. Я удаляю проголосовавший. – lexu

0

Попробуйте этот запрос (очень похожий на других й отправил)

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 

Берегись, что отчеты каждую дружбу цепь в два раза, как только вы удалите абсолютные идентификаторы. Чтобы избежать этого, я спрашиваю, что T1.UserID быть меньше, чем 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

Как вы думаете, что он сообщит дважды? Проверьте этот раздел 't1.UserId = 2 и T2.userId = 1'. Тогда проверка '(T1.userID T2.userID)' бесполезна. – Sujee

+0

@Sujee: BANG (рука хита.) ** Вы правы ** Я думал слишком много об общем случае! Мои извинения! – lexu

+0

Нет проблем @lexu. Иногда это случается и со мной! – Sujee

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