UNION 查询错误

Posted

技术标签:

【中文标题】UNION 查询错误【英文标题】:UNION Query Error 【发布时间】:2013-04-20 09:36:32 【问题描述】:

我有以下两个表(DEPT 和 EMP):

DEPT

DEPTNO,DNAME,LOC

EMP

EMPNO, ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO

我正在执行以下查询: “使用 UNION 显示部门编号和名称以及员工编号和名称。选择 适当的列标题并按名称按升序对其进行排序。”

这是我的查询:

SELECT Deptno, Dname 
FROM DEPT
ORDER BY Dname ASC
UNION
SELECT EMPNO,ENAME 
FROM   EMP
ORDER BY ENAME ASC;

我想知道为什么会出现以下错误:

联合 * 第 4 行出现错误:ORA-00933:SQL 命令未正确结束。

谁能告诉我这里出了什么问题?

谢谢

【问题讨论】:

【参考方案1】:

试试这个

SELECT Deptno AS ID, Dname  AS NAME
FROM DEPT
UNION
SELECT EMPNO  AS ID,ENAME  AS NAME
FROM   EMP
ORDER BY NAME ASC

编辑

要显示四列,请使用连接检查下面的查询

SELECT E.EMPNO ,E.ENAME ,D.Deptno , D.Dname 
FROM DEPT D
INNER JOIN 
EMP E ON E.DeptNO = D.DeptNo
ORDER BY E.ENAME ASC

【讨论】:

此查询正在运行并且只生成 ID 和 NAME 列。 Deptnp 和 EMpNo 组合在 ID 列下,Dname 和 Ename 组合在 Name 列中,这是不需要的。我想这个查询应该有四列。 @AaK:不。联合将具有相同列的结果表合并到一个具有相同列布局的结果表中。本例中的 ID 和名称。 @AaK 如果您需要四列,那么您应该使用连接而不是联合 感谢 Marco 和 sivareddy。由于这个问题专门说要使用 UNION,所以在这种情况下我一定要使用 UNION。感谢您的澄清。如果我想有四列,我会记住我将使用 JOINS。再次感谢。赞赏!【参考方案2】:

删除第一个查询中的ORDER BY 子句。

所以改成:

SELECT Deptno, Dname 
FROM DEPT
UNION
SELECT EMPNO,ENAME 
FROM   EMP
ORDER BY Dept.Dname, Emp.Ename ASC;

应该可以。

【讨论】:

以上是关于UNION 查询错误的主要内容,如果未能解决你的问题,请参考以下文章

UNION 查询错误 - “您已尝试执行不包含指定表达式的查询...”

Laravel 4 - Union + orederBy 结果错误查询

SQL Select - Union 结合 Join 查询导致错误

使用 UNION ALL 查询在 FROM 子句中出现语法错误

mysql数据库多个表union all查询并排序的结果为啥错误

mysql数据库多个表union all查询并排序的结果为啥错误