【问题标题】:Insert Into SQL Statement results in Column count doesn't match value count at row 1插入 SQL 语句导致列计数与第 1 行的值计数不匹配
【发布时间】:2020-04-05 19:15:28
【问题描述】:

我有一个空表 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 行的值计数不匹配”错误。我不确定为什么,因为我有三个列名和三个选择语句,所以我看不出我的列数与为什么值计数不匹配。请指教。谢谢!

【问题讨论】:

  • UNION 仅返回 1 列。你需要加入。
  • 样本数据和期望的结果会有所帮助。你想插入什么?
  • Hoin 是正确的选择,但是当您的表格只有一列时,您如何关联所有表格。您必须计算行数才能加入他们。

标签: mysql sql select union sql-insert


【解决方案1】:

我需要更多信息来回答这个问题。 您可以分享 StudentNames、studentemail 和 ClassName 表中的定义 (DDL) 吗?

不管怎样,我做了一个样本给你看:

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');

用连接选择这 3 个表:

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;

如果我帮助了你,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2013-08-24
    • 2020-11-23
    相关资源
    最近更新 更多