Так что в основном у меня есть 3 таблицы: студент, класс и зачисление.
CREATE TABLE class
('class_name' varchar(13), 'class_id' int primary key)
;
INSERT INTO class
('class_name', 'class_id')
VALUES
('math', 5697),
('science', 5768),
('computer', 6315),
('physical-ed', 6422),
('music', 7528),
('art', 7604),
('jrotc', 8797),
('culinary-arts', 8069)
;
CREATE TABLE student
('student_fname' varchar(8), 'student_id' varchar(11) primary key)
;
INSERT INTO student
('student_fname', 'student_id')
VALUES
('james', 'Vre94b3JpXO'),
('jim', 'JzqQ2zRVNm1'),
('jenny', 'xgqv9P42eYL'),
('kyle', 'QLNM0Wbyqk0'),
('kimberly', 'P2egAddWN0Q'),
('kayla', 'EGNDjWAreAy'),
('noah', 'bPeOyMMONGr'),
('nataly', '9Op53GGmqk5')
;
create table enrollment (
'no' int(10),
'student_id' varchar(11),
'class_id' int,
'semester' varchar(20),
primary key ('student_id', 'class_id', 'semester'),
foreign key ('student_id') references student ('student_id'),
foreign key ('class_id') references class ('class_id')
);
insert into enrollment values
(1, 'Vre94b3JpXO', 5697, 'Fall 2015'),
(2,'JzqQ2zRVNm1', 5697, 'Fall 2015'),
(3, 'xgqv9P42eYL', 5697, 'Fall 2015'),
(4, 'JzqQ2zRVNm1', 8069, 'Fall 2014'),
(5, 'xgqv9P42eYL', 8069, 'Fall 2014');
Если я следую запросу:
select * from student s
join enrollment e on s.student_id = e.student_id
join class c on c.class_id = e.class_id
Я бы получил что-то вроде этого:
Как я могу удалить избыточный столбец, например student_id и class_id?
Этот вопрос расширен со страницы: Структура таблицы - связать одного студента с идентификатором нескольких классов
и демо
Я использую метод соединения, но я не мог получить то, что хотел, спасибо за вашу помощь.
Просто укажите столбцы, которые вы хотите просмотреть.
select s.student_fname, s.student_id,
e.no, e.class_id, e.semester,
c.class_name,
from
student s join enrollment e
on s.student_id = e.student_id
join class c
on c.class_id = e.class_id ;
Чтобы ответить на этот вопрос, было бы неплохо рассмотреть некоторые основы:
SELECT *
Это *
отображает все столбцы из выбранных вами таблиц
Если вы хотите отображать только некоторые столбцы, вы должны конкретно назвать его:
SELECT class_name, ...
Но если у вас есть таблицы с одинаковым именем столбца, вы должны указать имя таблицы или псевдоним:
SELECT c.class_name
FROM mytable t
INNER JOIN class c ON c.id_table = t.id
Что-то вроде этого:
SELECT s.* ,e.no ,e.class_id ,e.semester ,c.class_name FROM student s INNER JOIN enrollment e ON s.student_id = e.student_id INNER JOIN class c ON c.class_id = e.class_id
В вашем выборе вы можете указать каждый столбец, который вы хотите, и, следовательно, какой порядок.
SELECT e.no
,e.class_id
Если вам нужны все столбцы из таблицы, вы можете сделать эту таблицу точек:
SELECT s.*
Поскольку у вас уже есть существующий запрос, вы можете просто сделать звезду, чтобы получить все столбцы:
SELECT *
Вот хорошее место для начала некоторых основных трюков SELECT
: https://www.techrepublic.com/article/sql-basics-select-statement-options/
В стороне, может быть полезно использовать такой сайт, как: http://poorsql.com/, чтобы помочь с вашим форматированием SQL.
select s.*, e.*, c.class_name...