rachelamellyn Ответов: 1

Как мне объединить три таблицы с помощью left join


У меня есть три стола

студент
student_id student_name класс пол nohp
12345 ли 5А мужчина 011-111
54321 Лиа 5А женщина 022-222

одолжить
borrow_id student_id nolaptop lend_date pass_date send_date
1 12345 LP123 01/11/19 NULL 01/10/19
2 54321 LP321 01/11/19 NULL 01/10/19

проходить
borrow_id student_id nolaptop lend_date pass_date send_date
1 12345 LP123 01/11/19 02/11/19 01/10/19
NULL NULL NULL NULL NULL NULL

Я хочу, чтобы статистическая таблица выглядела(когда все три таблицы объединяются) следующим образом:
student_id student_name класс пол nohp borrow_id nolaptop lend_date pass_date send_date
12345 ли мужчина 5А 011-111 1 LP123 01/11/19 02/11/19 01/10/19
54321 Lia 5A женский 022-222 2 LP321 01/11/19 NULL 01/10/19

Что я уже пробовал:

Я использую кодирование:
"select * from borrow left join student on borrow.student_id=student.student_id left join pass on borrow.student_id=pass.sudent_id


но student_id Лии, borrow_id, nolaptop, lend_date, pass_date и send_date не появились, так как все ее данные в таблице pass равны нулю.

0x01AA

Присоединяясь ко всем student должен делать свою работу:
select
*
from student
left join borrow on borrow.student_id = student.student_id
left join pass on pass.student_id = student.student_id

rachelamellyn

Я уже использовал эту кодировку, но все равно она показывает тот же результат

1 Ответов

Рейтинг:
5

OriginalGriff

Во-первых, покажите нам фактический код, который вы пытаетесь использовать: ваш код не будет работать как столбец pass.sudent_id не существует в ваших таблицах.

И когда я это исправляю, это работает:

SELECT * FROM borrow 
LEFT JOIN student ON borrow.student_id=student.student_id 
LEFT JOIN pass ON borrow.student_id=pass.student_id
С вашими данными, как показано на рисунке, я получаю все данные:
Borrow_ID	Student_ID	NoLapTop	Lend_Date	Pass_Date	Send_Date	Student_ID	Student_Name	Class	Gender	NoHP	Borrow_ID	Student_ID	Lend_Date	NoLapTop	Pass_date	Send_Date
1	12345	LP123     	2019-11-01	NULL	2019-10-01	12345	Lee       	5A        	Male      	011-111   	1	12345	2019-11-01	LP123     	2019-11-02	2019-10-01
2	54321	LP321     	2019-11-01	NULL	2019-10-01	54321	Lia       	5A        	Female    	022-222   	NULL	NULL	NULL	NULL	NULL	NULL

Если вы хотите меньше, то укажите точно, какие строки вы хотите вместо этого SELECT *

Кстати: ваши таблицы, похоже, дублируют много данных, что, как правило, плохая идея. А гендерные поля, вероятно, должны быть внешним ключом к отдельной таблице, а не хранить текст непосредственно в таблице "студент".
Я бы посмотрел, что вы храните и почему, и подумал, Действительно ли это лучший дизайн - дублированные данные легко выходят из строя и вызывают серьезные проблемы позже.
Я бы также изменил имена: использовал множественное число для таблиц и использовал ID в качестве строки ID в каждой таблице, а также ссылался на нее через столбцы, названные в честь таблицы и "ID":
Students
ID StudentName Class GenderID NoHP

Borrowings
ID StudentID LaptopID LendDate PassDate SendDate

Passes
ID BorrowID StudentID LaptopID LendDate PassDate SendDate