Изменить условие INNER JOIN, если будет NULL

227
22 июня 2017, 04:18

Чисто для вашего понимания напишу рандомные таблицы:

(lesson)        (teacher)
id|name          id|name
1 |Математика    1 |Дудина П.П.
2 |Русский       2 |Липова З.З.
3 |Физика        3 |Дроздова К.К.
(lesson_teacher)
id|lesson_id|teacher_id
1 |    1    |     1
2 |    2    |   NULL
3 |    3    |     3
SELECT * FROM lesson_teacher
INNER JOIN lesson ON lesson_teacher.lesson_id = lesson.id
INNER JOIN teacher ON lesson_teacher.teacher_id = teacher.id
WHERE lesson.name = "Русский"

По этому примеру мне нужно вывести всю строку, где lesson.name = "Русский" (2), но тут не выводит ничего. Я конечно понимаю что ничего не выводит из-за установки "INNER JOIN teacher" и указания условия "lesson_teacher.teacher_id = teacher.id", но мне после получения этой выборки нужно вывести этого преподавателя, а без INNER JOIN это не получится сделать, я думал может как-то через IF сделать?

Answer 1

Так как у этой записи в качестве ссылки на учителя стоит NULL, то и выводить нечего. Если необходимо вывести всю строку, с отсутствующим значением, то необходимо переписать код запроса под LEFT JOIN. Например так:

SELECT * FROM lesson_teacher
  LEFT JOIN lesson ON
lesson_teacher.lesson_id = lesson.id
LEFT JOIN teacher ON
lesson_teacher.teacher_id = teacher.id
WHERE lesson.name = "Русский"
READ ALSO
не могу понять как реализовать файловую систему sql

не могу понять как реализовать файловую систему sql

Не хочу сделать на сайте для пользователей файловую систему папка+файл например пользователь создал папку "home" в ней папка "user" и так далее...

240
Как лучше хранить данные в БД?

Как лучше хранить данные в БД?

Стоит задача создать магазин с разными предметамиЯ решил каждому предмету давать уникальный ID и если человек купил что либо то записывать...

292
Обязательно ли в типе параметра функции/процедуры указывать длину?

Обязательно ли в типе параметра функции/процедуры указывать длину?

Обязательно ли при указании типа параметра функции или хранимой процедуры указывать длину? Например, есть хранимая процедура:

265
проблема с кодировкой при записи в базу mysql на heroku

проблема с кодировкой при записи в базу mysql на heroku

Здравствуйте, перенес таблицу на heroku таблица в utf-8Всё отображается нормально, но если сделать новую запись, русские символы отображаются...

346