MySQL внутреннее соединение одиночный запрос - PullRequest
2 голосов
/ 14 февраля 2010

У меня есть 2 таблицы:

users : contains id and name
friends : contains id1 and id2

Предположим, у меня есть эти данные в таблице users:

id : 1 , name : FinalDestiny
id : 2 , name : George

А эти данные в таблице friends:

id1: 1 , id2: 2

Так что это означает, что 1 дружит с 2.

Мне нужно одним запросом сказать, что id1 дружит с id2 (но мне нужны имена). Я должен сделать одно mysql внутреннее или левое соединение, но я не знаю, как

Ответы [ 6 ]

2 голосов
/ 14 февраля 2010
Select F1.Name,
       F2.Name
From Friends F
INNER JOIN USER F1 ON F.ID1 = F1.id
INNER JOIN USER F2 ON F.ID2 = F2.id

Пояснение:

Поскольку друг - это состав из двух пользователей, friend1 и friend2, поэтому мы попытаемся объединить друга с двумя пользователями, 1 пользовательской таблицей, соответствующей ID1, и другой с ID2, получая информацию для обоих друзей из соответствующей таблицы пользователей.

1 голос
/ 14 февраля 2010

Вам нужно выбрать из друзей и присоединиться к таблице пользователей дважды (для каждого друга)

SELECT u1.Name, u2.Name 
FROM Friends as fr 
  INNER JOIN users as u1 on fr.Id1 = u1.id
  INNER JOIN users as u2 on fr.Id2 = u2.id
1 голос
/ 14 февраля 2010

Вы должны иметь возможность запрашивать это без явного использования объединений, используя что-то вроде ...

SELECT * FROM (friends, users AS u1, users AS u2) WHERE
friends.id1=u1.id AND friends.id2=u2.id
1 голос
/ 14 февраля 2010

Вам нужно присоединиться к вашему столу users дважды.

SELECT 
   u1.name AS FirstPerson
  ,u2.name AS SecondPerson 
FROM 
  friends f
INNER JOIN
  users u1
ON
  u1.id = f.id1
INNER JOIN
  users u2
ON
  f.id2 = u2.id
1 голос
/ 14 февраля 2010

используйте псевдонимы и дважды объедините пользовательскую таблицу с таблицей друзей:

    SELECT `u1`.`name` `name1`, `u2`.`name` `name2`
      FROM `friends` `f`
INNER JOIN `users` `u1`
        ON `f`.`id1` = `u1`.`id`
INNER JOIN `users` `u2`
        ON `f`.`id2` = `u2`.`id`
1 голос
/ 14 февраля 2010

Я не знаю, сможете ли вы это сделать. Но это самое близкое, что я мог бы получить для тебя.

select u1.name, u2.name from users u1, users u2, friends f where u1.id = f.id1 and u2.id = f.id2

...