Вложенность INNER JOIN с вызовами UNION в SQL - совершенно потеряна

У меня есть таблица друзей : id , fid1 , fid2 , который представляет собой дружбу между двумя пользователями (двунаправленный).

и пользователи таблица: fid , name

Я хотел бы создать функцию или запрос, который принимает

  1. идентификатор пользователя

и возвращает

  1. список друзей (users.fid, users.name), который представляет всех друзей, которые являются друзьями с исходным идентификатором пользователя

. У меня проблемы с вложением JOIN и UNION. Мне нужен СОЮЗ, чтобы быть уверенным, что у меня будут все дружеские отношения (но также не будет дубликатов). Вот что у меня есть:

SELECT fid1 as friends FROM friendships WHERE fid2 = 123456
INNER JOIN users
ON friendships.fid1 = users.fid

UNION ALL (

SELECT fid2 as friends FROM friendships WHERE fid1 = 123456
INNER JOIN users
ON friendships.fid2 = users.fid
)

, что является ошибкой:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN users ON friendships.fid1 = users.fid UNION ALL ( SELECT fid2' at line 2

в целом у меня проблемы с командами, потому что я не понимаю, как SQL обрабатывает результаты - в нормальных языках программирования я бы пропустил результат INNER JOINs к UNION, а затем примените эту функцию. Но я здесь немного заблудился. Есть мысли?

0
задан Adam Wenger 23 November 2011 в 22:41
поделиться