База данных избавиться от повторного атрибута - PullRequest
0 голосов
/ 27 июня 2018

Итак, в основном у меня есть 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

Я бы получил что-то вроде этого: enter image description here

Как я могу удалить лишний столбец, такой как student_id и class_id?

Этот вопрос расширен со страницы: Структура таблицы - связать одного учащегося с идентификатором нескольких классов

и демо

Я использовал метод соединения, но не смог получить то, что хотел, спасибо за вашу помощь.

Ответы [ 3 ]

0 голосов
/ 27 июня 2018

Примерно так:

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.

0 голосов
/ 27 июня 2018

Чтобы ответить на этот вопрос, было бы неплохо рассмотреть некоторые основы:

SELECT *

Это * для отображения всех столбцов из таблиц, которые вы выбрали

Если вы хотите отобразить только некоторые столбцы, вы должны указать его конкретно:

SELECT class_name, ...

Но если у вас есть несколько таблиц с одинаковым именем столбца, вы должны указать имя таблицы или псевдоним:

SELECT c.class_name
 FROM mytable t 
 INNER JOIN class c ON c.id_table = t.id
0 голосов
/ 27 июня 2018

Просто укажите столбцы, которые вы хотите увидеть.

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 ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...