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 子句中出现语法错误