【问题标题】:UNION Query ErrorUNION 查询错误
【发布时间】: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 命令未正确结束。

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

谢谢

【问题讨论】:

    标签: sql oracle oracle11g


    【解决方案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;
    

    应该可以。

    【讨论】:

      猜你喜欢
      • 2014-01-28
      • 2016-02-29
      • 2014-10-18
      • 2021-12-07
      • 2014-12-28
      • 1970-01-01
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      相关资源
      最近更新 更多