[英]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.