我收到错误: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;
答案 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,我将为您分享。
这里我谈论的是更多的事情,例如创建主,外部,插入等裁缝。