2013-11-20 5 views
2

У меня есть две таблицы, один дружит стол и другие таблицы профиля таблица (все данные, связанные с пользователем, например Firstname, фамилия и т.д.) и имеет отношение между нимиSQL результата присоединиться запроса вопрос

Friend столом (Он имеет два входа для каждого пользователя, например, для первых двух строк)

enter image description here

Теперь я хочу, чтобы отобразить имена пользователей из выше таблиц, которые будут выглядеть, как показано ниже

enter image description here

так на выходе я хочу, чтобы удалить дубликаты, который не работает для меня моего запроса

select distinct u.FirstName + ' ' + u.LastName As UserName, 
     (select distinct firstname + ' ' + lastname from UserProfiles where id = uw.friendid) as FriendName 
     from UserFriends as uw left join userprofiles as u 
     on u.id = uw.userid 

ответ

2

Вам нужно зарегистрироваться UserProfiles дважды UserFriends, так как есть два столбец зависит от него.

SELECT a.ID, 
     f.FirstName + ' ' + f.LastName FriendName, 
     u.FirstName + ' ' + u.LastName UserName 
FROM UserFriends a 
     INNER JOIN UserProfiles f 
      ON a.FriendID = f.ID 
     INNER JOIN UserProfiles u 
      ON a.UserID = u.ID 
     INNER JOIN UserFriends dup 
      ON a.FriendID = dup.UserID 
       AND dup.FriendID = a.UserID 
       AND a.ID > dup.ID 
+0

Спасибо за помощь. Но это все равно дает мне дубликаты – user1037747

+0

Вы пробовали попробовать добавить 'DISTINCT', например. 'SELECT DISTINCT ....' –

+0

Да, я тоже это пробовал – user1037747

0

Я хотел бы предложить, что вы должны использовать КТР для устранения дубликатов из beggining (в том, что можно сделать самостоятельно присоединиться к таблице). Мне удалось воспроизвести ваш сценарий, поэтому, если вы немного настроите запрос, вы сможете получить желаемый результат.

with cte as 
(select 
t1.id as a_id 
,t1.friendID as a_friendID 
,t1.userID as a_userID 
,t2.id as b_id 
,t2.friendID as b_friendID 
,t2.userID as b_userID 
from #temp t1 
left join #user t2 on t1.id+1=t2.id 
), 
cte2 as 

select 
a_id 
,a_userID 
,a_friendID 
from cte t1 
where a_friendID = (select b_friendID from cte t2 where t2.b_id= t1.b_id-1) 
) 


select firstname+ ' '+lastname as FriendName 
,firstname+ ' '+lastname as UserName 
from cte2 uw 
left join UserProfiles u on uw.a_userID=u.ID and uw.a_friendID=u.id 
+0

Не работает, это не дает мне друзей – user1037747

Смежные вопросы