2016-12-29 3 views
0

Это то, что я считаю довольно распространенным, но я просто борюсь с подходящим запросом.Три способа соединения с таблицей ссылок

User Table 
id 

Member table 
id 
name 

User Member link table 
user_id 
member_id 

Пользователь может существовать в таблице пользователя, но не имеет строки в таблице ссылок пользователя.

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

Вот что у меня есть, но он получает только строки из таблицы пользователя, которые связаны:

SELECT user.id, user.username, member.id, member.name 
FROM users 
LEFT JOIN user_member ON user.id = user_member.user_id 
JOIN member ON user_member.member_id = member.id; 

я должен получить что-то вроде этого:

user.id user.username member.id member.name 
1   bob    null  null 
2   alice   10   Alice 
3   jane   11   Jane 
4   joe    null  null 

Любые предложения?

+0

Почему вы используете 'ЛЕВЫЙ JOIN' для одного соединения, но не для других? –

+0

Ну, если я использую LEFT JOIN для второго соединения, я получаю все строки из USER, но там, где есть соответствующий член, я получаю повторяющуюся строку. –

+0

Можете ли вы предоставить образец вывода, который вы ожидаете? Кроме того, если у пользователя много членов, вы не можете избежать дублирования пользовательских данных. – Alex

ответ

1

Я предполагаю, что элемент-член в таблице user_member всегда имеет соответствующую строку в таблице member. Первый, присоединяйтесь к member и user_member. Второй, присоединяйтесь к user.

SELECT user.id, user.username, member.id, member.name 
FROM users 
LEFT JOIN 
(user_member INNER JOIN member ON user_member.member_id = member.id) 
ON user.id = user_member.user_id; 
1

Попробуйте с помощью CROSS JOIN

SELECT user.id, user.username, member.id, member.name 
    FROM users u 
     CROSS JOIN member m 
     LEFT JOIN user_member um 
      ON u.id= um.user_id 
       AND m.id= um.member_id 
Смежные вопросы