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

问题描述 投票:0回答:3
CREATE TABLE student_activestudent AS 
(
   SELECT * 
   FROM
      student
   INNER JOIN
      activestudent ON activestudent.studentnumber=student.studentnumber
);

我期待一个包含2列studentnumber的表,但我收到了Duplicate错误 - >重复列名'studentnumber'

sql
3个回答
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

 );

0
投票

至少,studentnumber是重复的。一般来说,我强烈建议视图列出所有列。如果基础列发生更改,这将保护视图。

也就是说,如果studentnumber是唯一的专栏,那么你可以这样做:

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

使用using*不会重复连接键。


0
投票

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

最好的方法是不要选择*

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

将student.studentnumber选为stuNumber,将activestudent.studentnumber选为actstuNumber

© www.soinside.com 2019 - 2024. All rights reserved.