2016-05-17 2 views
0

У меня есть три таблицы, таблица пользователей, таблица курсов и таблица скрытых курсов.MySQL комплексное объединение трех таблиц

В таблице скрытых курсов содержится столбец user_id и колонка course_id.

Предположим, я хочу видеть всю информацию таблицы скрытых курсов для всех пользователей для курса «курс1». Когда я получаю мои данные, я хочу, чтобы включать в себя:

  • hidden_courses.id
  • courses.id
  • courses.title
  • user.id
  • user.name

Я пробовал несколько вещей, чтобы выполнить этот запрос, но он не всегда правильно заполняет мои столбцы. Я хочу, чтобы информация о курсе всегда была из «курса1» и списка всех пользователей. Единственное, что может не существовать, это hidden_courses.id.

Вот что я пытался:

SELECT hc.id, u.id, u.name, c.id, c.title 
FROM hidden_courses AS hc 
RIGHT JOIN users AS u ON u.id = hc.user_id 
RIGHT JOIN courses AS c ON c.id = hc.course_id 

Должен ли я выполнить запрос с использованием ЛЕВЫЙ JOINS вместо и выбрать из таблицы пользователей? Мне тоже это не удавалось.

Между курсами и таблицей пользователей нет никакой связи. Допустим, у меня 3 пользователя, и одна скрытая запись курса для user1 и course1. Я хотел бы выход быть:

enter image description here

+4

Поверьте, это не относится к категории «сложный». :-) –

+0

Какова связь между «пользователями» и «курсами»? –

+1

Если вы предоставляете свои структуры таблиц, некоторые выборочные данные и ожидаемый результат, учитывая данные выборки, тогда было бы гораздо легче ответить. Пожалуйста, смотрите: http://stackoverflow.com/help/how-to-ask –

ответ

1

Я вообще найти LEFT JOIN с, чтобы легче понять.

SELECT hc.id, u.id, u.name, c.id, c.title 
FROM courses as c -- must exist 
LEFT JOIN users as u on 1=1 -- all users, optional 
LEFT JOIN hidden_courses as hc on hc.user_id=u.id and hc.course_id=c.id -- optional 

Предположим, нет пользователей, то нет нужных результатов. Если это так, замените LEFT JOIN users на JOIN users, и тогда вы получите этот эффект.

Вы хотите фильтровать только часть пользователей основного courses c? Если да, замените 1=1 на что-то, что связывает users с соответствующими courses.

Я не знаю, возможно ли это с помощью RIGHT JOIN, поскольку я их никогда не использую.

+0

«Вообще»!?!? – Strawberry

+0

? [] (Http://example.com) –

Смежные вопросы