Sql 创建表错误oracle

Sql 创建表错误oracle,sql,oracle,Sql,Oracle,我得到一个错误:ORA-01789:查询块的结果列数不正确 尝试从其他两个表中的数据创建表时。请帮助,这只是一个语法错误,还是我以错误的方式组合了表 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

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

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

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;

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

您需要
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时的列数应该相同在SELECT语句中使用UNION时的列数应该相同我想您希望
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
   JOIN departments d on(d.department_id = e.department_id);

我想你想要加入而不是联合:

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

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

您的
select
查询返回三列,对应于需要四列的表
union
会联合查询结果,但它们必须具有相同数量和类型的列。第二个查询有一列,前三列。

从子查询创建表时,结果列的类型和列数必须与子查询相同

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

可能该列存在于DDL中,而子查询不存在。 在您的示例中,您尝试在DDL中使用列DEPTNAME,但在子查询中,该列在表EMPLOYEES中不存在, 如果要使用列DEPTNAME,则必须与表DEPARTMENTS进行联接

其余情况如下:

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;
在我的博客中,我有一篇关于DDL的文章,我将与大家分享


在这里,我将介绍更多的内容,如创建主、外部、插入等。klaves。

从子查询创建表时,生成的列必须与子查询具有相同的类型和列数

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

可能该列存在于DDL中,而子查询不存在。 在您的示例中,您尝试在DDL中使用列DEPTNAME,但在子查询中,该列在表EMPLOYEES中不存在, 如果要使用列DEPTNAME,则必须与表DEPARTMENTS进行联接

其余情况如下:

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;
在我的博客中,我有一篇关于DDL的文章,我将与大家分享


在这里我讲了更多的东西,比如创建主、外部、插入、,等等。klaves。

你需要
加入
来设置部门而不是
联盟
错误消息有什么不清楚的?你需要
加入
来设置部门而不是
联盟
错误消息有什么不清楚的?这应该是评论,而不是回答。这应该是评论,而不是回答。