Вы хотите что-то вроде этого:
SELECT p.name, f.friend_id
FROM person AS p
INNER JOIN friends AS f ON p.person_id = f.person_id
WHERE p.person_id = 1
Это объединяет две таблицы, используя p.person_id = f.person_id
Если у человека нет друзей, вы не получите никаких строк - если вы не хотите этого, используйте LEFT JOIN, и вы получите одну строку с NULL friend_id
.
Редактировать: если вы хотите снова присоединиться к друзьям:
SELECT p.name AS person_name, friend.name AS friend_name
FROM person AS p -- Our person
INNER JOIN friends AS f ON p.person_id = f.person_id -- the join table
INNER JOIN person AS friend on f.friend_id = friend.id -- Join back on person again
WHERE p.person_id = 1
Возможно, для вашего приложения вам нужно трехстороннее объединение, но чаще вам понадобится только двухстороннее, как указано выше, или вот так:
SELECT p.name, f.friend_id
FROM person AS p
INNER JOIN friends AS f ON p.person_id = f.friend_id
WHERE f.person_id = 1
Это даст вам имена всех людей, которые дружат с person_id 1 (но не имя person_id 1)