当内部连接2个具有相似列名的表时,为什么会收到“重复列名”错误?

时间:2019-04-02 12:08:29

标签: sql

CREATE TABLE student_activestudent AS 
(
   SELECT * 
   FROM
      student
   INNER JOIN
      activestudent ON activestudent.studentnumber=student.studentnumber
);

我期望一个包含2列学生号的表格,但我收到了重复错误->列名'studentnumber'重复了

3 个答案:

答案 0 :(得分:0)

数据库表必须具有唯一的列名。 当您执行select *时,您将从所有表中获取所有列,并且studentnumber同时存在于student表和activestudent表中。因此,要解决您的问题,请指定所需的列,而不要使用*

 CREATE TABLE student_activestudent AS 
 (
   SELECT
     student.studentnumber,
     ..Other columns..
   FROM
      student
   INNER JOIN
      activestudent ON activestudent.studentnumber=student.studentnumber

 );

答案 1 :(得分:0)

至少studentnumber是重复的。通常,我强烈建议视图明确列出所有列。如果基础列发生更改,则可以保护视图。

也就是说,如果studentnumber only 列,那么您可以这样做:

CREATE TABLE student_activestudent AS 
   SELECT * 
   FROM student s JOIN
        activestudent ast 
        USING (studentnumber);

对于using*不会重复加入键。

答案 2 :(得分:0)

您不能选择两个具有相同列名的表。

最好的方法是不选择*

按列选择,如果该列相同,则可以输入[as]

示例

选择student.studentnumber为stuNumber,activestudent.studentnumber为acttuNumber