【问题标题】:Order by clause with union in SQL select query在 SQL 选择查询中使用并集排序子句
【发布时间】:2018-06-14 18:50:22
【问题描述】:

有没有办法根据表列值对两个全选语句的联合进行排序。 我的示例代码是:

SELECT *  FROM emp WHERE mgr='7839' 
UNION
SELECT * FROM emp  WHERE NOT EXISTS (SELECT * FROM emp WHERE mgr='7839') 
AND empno='7839' 
order by ename;

此代码显示错误为:无效标识符“ENAME”。 我没有在 select 语句中使用特定列而不是 *,因为表中有超过 10 列并且代码看起来很大。 但是 ename 是 emp 中的一列。

【问题讨论】:

    标签: sql oracle sql-order-by union


    【解决方案1】:

    您是否会考虑对您的查询进行小的更改。

    SELECT *  FROM 
    (SELECT *  FROM emp WHERE mgr='7839' 
    UNION
    SELECT * FROM emp  WHERE NOT EXISTS (SELECT * FROM emp WHERE mgr='7839') 
    AND empno='7839') AA 
    order by AA.ename;
    

    【讨论】:

      【解决方案2】:

      为什么要为此使用union?做吧:

      SELECT e.* 
      FROM emp e
      WHERE e.mgr = '7839' OR
            (NOT EXISTS (SELECT 1 FROM emp e2 WHERE e2.mgr = '7839') AND
             empno = '7839' 
            )
      ORDER BY ename;
      

      【讨论】:

        猜你喜欢
        • 2021-07-23
        • 1970-01-01
        • 2018-01-05
        • 2017-06-02
        • 1970-01-01
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多