Внутреннее соединение MySQL с 2 столбцами - PullRequest
0 голосов
/ 14 февраля 2010

У меня есть одна таблица пользователей с 2 ​​полями: id, name и другая таблица друзей с 2 ​​полями: userid1 userid2.

Таким образом, это означает, что userid1 является другом с userid2. Я хочу с одним внутренним или левым соединением показать это:

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

что-то

ВЫБРАТЬ * У друзей ВНУТРЕННИЕ ПРИСОЕДИНЯЙТЕСЬ к пользователям ПО friends.userid1 = users.id AND friends.userid2 = users.id, но это не работает.

Любой хороший вопрос с хорошим объяснением, пожалуйста?

Если, например, у меня есть следующие данные в таблице пользователей: ID: 1 ИМЯ: FinalDestiny ID: 2 ИМЯ: Джордж

и следующие данные в таблице друзей: ID1: 1 ID2: 2

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

Мне нужно одним запросом получить имя 1 и имя 2 и повторить, что они друзья

FinalDestiny дружит с Джорджем

Ответы [ 3 ]

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

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

SELECT u1.Name, u2.Name<br> FROM Users u1, Users u2, Friends f<br> WHERE u1.id = f.userid1 AND u2.id = f.userid2

Я присоединяюсь к таблице «Пользователи» с таблицей «Друзья» на Users.id = Friends.userid1. Затем я соединяю эту новую таблицу с таблицей Users (новая таблица) .userid2 = Users.id. Это приводит к таблице с 4 столбцами. Эти столбцы являются исходными 2 столбцами таблицы «Друзья» в дополнение к 2 столбцам для имен друзей. u1, u2 и f и ссылаются на три таблицы, которые были объединены. Таблица пользователей была объединена с таблицей друзей дважды. u1 - это копия таблицы «Пользователи», которая была объединена на Friends.userid1 = User.id. u2 - это копия таблицы пользователей, которая была объединена в Friends.userid2 = User.id.

Из этой таблицы с 4 столбцами я выбираю только имена друзей.

Дайте мне знать, если понадобится больше объяснений.

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

Вы проверяете, что пользователь является другом самого себя. Используйте OR в своем выборе, чтобы соответствовать друзьям пользователя:

SELECT * FROM friends INNER JOIN users ON friends.userid1 = users.id OR friends.userid2 = users.id 
0 голосов
/ 14 февраля 2010

Если, например, у меня есть следующие данные в таблице пользователей: ID: 1 ИМЯ: FinalDestiny ID: 2 ИМЯ: Джордж

и следующие данные в таблице друзей: ID1: 1 ID2: 2

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

Мне нужно одним запросом получить имя 1 и имя 2 и повторить, что они друзья

FinalDestiny дружит с Джорджем

...