2015-03-12 3 views
0

Давайте предположим, что две таблицы:MySQL: Выберите из одной таблицы, добавить значение из другой таблицы, если существует

STUDENTS: 
id | name | faculty_id 

и:

FACULTIES: 
id | name 

Я пытаюсь запросить для студентов по students.id, а также возвращающие faculties.name, где students.faculty_id = faculties.id.

я использовал:

SELECT students.*, faculties.name FROM students 
JOIN faculties on students.faculty_id = faculties.id 
WHERE students.id = ' ... '; 

Это хорошо работает, но есть проблема:

Если, по какой-то ошибке, студент был назначен несуществующий faculty_id, чем он никогда не будет найден. Я бы хотел написать более «гибкий» запрос, который возвращал бы faculty.name, только если совпадение найдено, иначе просто оставьте его пустым.

Кроме того, в запросе не должно быть циклов с интенсивной интенсивностью памяти, поскольку вы можете запрашивать по имени и т. Д., Что приводит к большому количеству совпадений.

ответ

2

на левое будет возвращать все студенты, которые отвечают вашим критериям или нет, связанные student.faculty_id с действительным faculty.id ... IFNULL устанавливает значение пустым, если вместо «нулевой "

SELECT 
     students.*, 
     ifnull(faculties.name,'') 
    FROM 
     students 
     LEFT JOIN faculties on students.faculty_id = faculties.id 
    WHERE students.id = ' ... '; 
+0

Работает как волшебство! – Dean

+0

Рад, что это помогло! – dbinns66

-3

Вместо JOIN в вашем запросе. Попробуйте INNER JOIN

SELECT students.*, faculties.name FROM students 
INNER JOIN faculties on students.faculty_id = faculties.id 
WHERE students.id = ' ... '; 
+0

Не было бы таким же, как СОЕДИНЕНИЕ? – Dean

+0

Существуют разные JOIN. INNER JOIN, OUTER JOIN FULL JOIN и т. Д. –

+3

Я имел в виду, что JOIN не подходит для INNER JOIN – Dean

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