繁体   English   中英

创建表错误oracle

[英]Create table error 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;

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

我认为您想要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);

您需要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条件的列名,因为您没有提及该关系。

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

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

例如,不值得在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中,有一篇文章讨论了ORACLE SQL中的DDL CREATE TABLE语句 ,我将为您共享。

在那里,我谈论了更多的事情,例如创建主要的,外部的,插入的等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM