Учитывая таблицу пользователей с первичным ключом id
, у меня есть внешняя таблица friends
, которая имеет только два поля (userid1, userid2
). Это позволяет нам создавать любые отношения между разными пользователями (от одного до многих, от одного до одного и т. Д.). Пользователь может отображаться в любом столбце, и оба столбца равны. IOW, одна запись для каждой связи.SQL найти записи на основе двух столбцов
Как я могу вытащить всех друзей, которые данный пользователь id
имеет. Скажите, у Jonny, есть 3 знакомых и его пользователя id
is 16
... должен ли мой запрос sql выглядеть так?
SELECT *
FROM db.users
JOIN db.friends
ON db.users.id = db.friends.userid1
AND db.users.id = 16
Надеюсь, это ясно. Также, если возможно, могу ли я исключить Джонни из набора результатов?
Этот запрос, так как перечисленные ЭДД мне следующее:
id name uuid birthday userid1 userid2
16 jonny ABCDEFGHIJKLMNOP 1967-04-27 01:00:00 1 2
16 jonny ABCDEFGHIJKLMNOP 1967-04-27 01:00:00 1 3
Это довольно близко, за исключением того, я хочу его друзей, не Jonny
Спасибо, ребята, так что я получил его на работу благодаря вам. Вот окончательный рабочий запрос.
SELECT *
FROM db.users
WHERE db.users.id IN
(
SELECT db.friends.userid2 as id FROM db.friends WHERE db.friends.userid1 = 16
union
SELECT db.friends.userid1 as id FROM db.friends WHERE db.friends.userid2 = 16
)
, который дает мне:
id name uuid birthday
2 robin ABCDEFGHIJKLMNOP 1967-04-27 01:00:00
3 gary ABCDEFGHIJKLMNOP 1967-04-27 01:00:00
Выполнить запрос, предложили и сказали нам, соответствует ли результат вашим потребностям (а если нет, то каким образом это не удалось). – Oswald
Друзья jonnies - пользователи с 'id' 2 и 3. Итак, у вас уже есть jonnies firends. В чем проблема? – Oswald
Да. Друзья - это то, что мы хотим. Мне тоже не нужны два дополнительных столбца, но это нормально. –