Вставить в SQL Результаты выписки в столбце Кол-во не соответствуют значению в строке 1 - PullRequest
0 голосов
/ 05 апреля 2020

У меня есть пустая таблица DatabaseStudents2, состоящая из трех столбцов: StudentName, StudentEmail, ClassName. Все данные, которые я хочу вставить в эту таблицу, хранятся в трех отдельных таблицах с одним столбцом. Я использую следующую инструкцию вставки:

insert into DatabaseStudents2(StudentName, StudentEmail, ClassName)
       select names from StudentNames
       union
       select email from studentEmail
       union
       select clname from ClassName;

Однако, когда я пытаюсь выполнить это, я получаю сообщение об ошибке «Количество столбцов не соответствует значению в строке 1». Я не уверен, почему, потому что у меня есть три имени столбца и три оператора выбора, поэтому я не вижу, как мой счетчик столбцов не соответствует, почему счетчик значений. Пожалуйста, порекомендуйте. Спасибо!

1 Ответ

2 голосов
/ 05 апреля 2020

Мне нужно больше информации, чтобы ответить на этот вопрос. Можете ли вы поделиться определением (DDL) из таблиц StudentNames, studentemail и ClassName?

В любом случае, я сделал пример, чтобы показать вам:

create table DatabaseStudents2 (StudentName varchar(25), 
StudentEmail varchar(50), ClassName varchar(50));
create table StudentNames (id int, names varchar(25));
create table StudentEmail (id int, id_student int, email varchar(50));
create table ClassName (id int, id_student int, clname varchar(50));

В таблицах StudentEmail и ClassName есть столбец ' id_student ', чтобы идентифицировать студента, и он используется для присоединения.

Давайте вставим несколько строк. Студенты:

insert into StudentNames values (1, "John");
insert into StudentNames values (2, "Maria");

Теперь электронная почта:

insert into StudentEmail values (1, 1, 'john@email.com');
insert into StudentEmail values (2, 1, 'john.secondmail@email.com');
insert into StudentEmail values (3, 2, 'maria@email.com');

У студента «Джон» есть 2 электронных письма. В первом столбце указан адрес электронной почты, а во втором - студент.

Теперь класс:

insert into ClassName values (1, 1, 'First Class');
insert into ClassName values (2, 2, 'Second Class');

Выбор этих трех таблиц с объединением:

select s.names, e.email, c.clname from StudentNames s 
inner join StudentEmail e on s.id = e.id_student
inner join ClassName c on s.id = c.id_student;

+-------+---------------------------+--------------+
| names | email                     | clname       |
+-------+---------------------------+--------------+
| John  | john@email.com            | First Class  |
| John  | john.secondmail@email.com | First Class  |
| Maria | maria@email.com           | Second Class |
+-------+---------------------------+--------------+

Наконец , вставка, которую вы хотите:

insert into DatabaseStudents2 (StudentName, StudentEmail, ClassName) 
select s.names, e.email, c.clname from StudentNames s 
inner join StudentEmail e on s.id = e.id_student 
inner join ClassName c on s.id = c.id_student;

Дайте мне знать, если я вам помог.

...