2016-06-12 6 views
1

Я делаю запрос, но он работает неправильно.SQL query left join issue

Моих данные таблиц являются следующим:

ПОДРАЙОН:
ID
Fieldsofstudy

student_subarea:
идентификатора первичного ключ,
student_id,
student_subarea иностранного ключа к подзону id и student_subarea.

ASK:
То, что я хочу сделать это, чтобы получить все поля исследования в одной колонке, а в другом столбце идентификатора студента, если он находится в классе. В противном случае укажите нуль или что-то еще.

SELECT a.`id` , a.`name` , a.`area_id` , u. * 
FROM `subarea` a 
LEFT JOIN student_subarea u ON u.subarea_id = a.id 
WHERE u.student_id =50 
OR u.student_id IS NULL 

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

+0

Вы можете обновить свой ответ включать какие сервера SQL вы используете, а также как любые сообщения об ошибках, которые вы получаете, когда пытаетесь запустить код, который вы предоставили. – kbuilds

+0

У меня нет ошибок. Я просто повторяю неправильные данные снова и снова, и я не знаю, как получить то, что я сказал раньше. – lostintheriver

ответ

2

Общее правило для left join и фильтрации, чтобы поместить фильтрующие положения в пункте on для всех, кроме первой таблицы. Так что это может делать то, что вы хотите:

SELECT a.`id`, a.`name`, a.`area_id`, u. * 
FROM `subarea` a LEFT JOIN 
    student_subarea u 
    ON u.subarea_id = a.id AND u.student_id = 50; 

Как вы помните эту логику? A left join возвращает все строки из первой таблицы, даже если во второй таблице нет совпадений. Это похоже на то, что вы хотите.

Проблема с вашей логикой заключается в том, что учащиеся кроме ученик 50 соответствуют логике. Таким образом, эти строки отфильтровываются.

+0

Спасибо, Гордон. Хорошее объяснение! – lostintheriver

0

Переместить критерии фильтрации к РЕГИСТРИРУЙТЕСЬ

SELECT a.`id` , a.`name` , a.`area_id` , u. * 
FROM `subarea` a 
LEFT JOIN student_subarea u 
    ON u.subarea_id = a.id 
    AND u.student_id =50 
0

Вы должны поставить условие на студенческом билете в условии объединения, а не в where пункте:

SELECT a.id, a.name , a.area_id, u.* 
FROM  subarea a 
LEFT JOIN student_subarea u 
     ON u.subarea_id = a.id 
     AND u.student_id = 50