创建表错误oracle

时间:2014-04-09 12:27:27

标签: sql oracle

我收到错误:ORA-01789:查询块的结果列数不正确

尝试从其他2个表中的数据创建表时。请帮助,这只是一个语法错误,还是我以错误的方式组合表?

CREATE TABLE EMPDATA(ID, NAME, SALARY, DEPTNAME)
AS
   SELECT e.employee_id, (e.first_name || e.last_name), e.salary  
   FROM employees e
   UNION
   SELECT d.department_name 
   FROM departments d;

5 个答案:

答案 0 :(得分:2)

使用UNION时的列数在SELECT语句中应该相同

答案 1 :(得分:2)

我认为您需要JOIN而不是UNION

CREATE TABLE EMPDATA(ID, NAME, SALARY, DEPTNAME)
AS
   SELECT e.employee_id, (e.first_name || e.last_name), e.salary, d.department_name
   FROM employees e
   JOIN departments d on(d.department_id = e.department_id);

答案 2 :(得分:1)

您需要join来设置部门,而不是union

CREATE TABLE EMPDATA(ID, NAME, SALARY, DEPTNAME)
AS
   SELECT e.employee_id, (e.first_name || e.last_name), e.salary, d.department_name 
   FROM employees e
   JOIN departments d on d.id = e.department_id

您可能需要调整join条件的列名,因为您没有提及该关系。

答案 3 :(得分:1)

您的select查询返回三列,您想要四个表。 union确实将查询结果联合起来,但它们必须具有相同数量和类型的列。您的第二个查询有一列,第一列 - 第三列。

答案 4 :(得分:0)

通过子查询创建表时,结果列必须与子查询具有相同的类型和列数。

例如,不值得在DDL中使用NUMBER类型的EMPLOYEE_ID列,而在DATE类型中使用EMPLOYEE_ID列。

该列可能存在于DDL中,并且子查询不存在。 在您的示例中,您尝试在DDL中包含列DEPTNAME,但是在子查询中该列在表EMPLOYEES中不存在, 如果要具有列DEPTNAME,则必须对表DEPARTMENTS进行JOIN。

其余内容如下:

CREATE TABLE EMPDATA (ID, NAME, SALARY, DEPTNAME) AS
   SELECT e.employee_id, (e.first_name || e.last_name), e.salary, d.department_name
   FROM employees e,
        departments d
   WHERE 1 = 1
   AND d.department_id = e.department_id;

在我的BLOG中,有一篇文章谈到了DDL CREATE TABLE statement in ORACLE SQL,我将为您分享。

这里我谈论的是更多的事情,例如创建主,外部,插入等裁缝。