1

我刚开始学习SQL。我正在使用 Oracle 数据库。

表 emp,列 empno、ename、job、mgr、hiredate、sal、comm、deptno。

我想从每个 deptno 的 ename 列中获取第一条记录,并且 ename 必须按 asc 排序。

以下 SQL 有效:

Select ename
from (Select d.ename
From emp d
Where d.deptno = 10
Order by ename asc)
where rownum <= 1
Union
Select ename
from (Select d.ename
From emp d
Where d.deptno = 20
Order by ename asc)
where rownum <= 1
Union
Select ename
from (Select d.ename
From emp d
Where d.deptno = 30
Order by ename asc)
where rownum <= 1
Union
Select ename
from (Select d.ename
From emp d
Where d.deptno = 40
Order by ename asc)
where rownum <= 1

我想优化它,所以如果我向 deptno 列添加一些记录,我不需要重写它。

我尝试过SELECT不同的喜欢

SELECT ename FROM emp WHERE (SELECT distinct deptno FROM emp)
4

2 回答 2

0

如果我了解您要正确执行的操作,则以下内容应该有效:

SELECT MIN(d.ename) as ename
  FROM emp d
  GROUP BY d.deptno
  ORDER BY ename asc

SQL Fiddle 在这里

于 2013-03-13T21:10:54.947 回答
0

另一种方法

SELECT d.deptno, 
       (SELECT ename 
          FROM emp e 
         WHERE e.deptno = d.deptno AND ROWNUM <=1) ename
  FROM dep d 

SQLFiddle

于 2013-03-13T21:29:57.267 回答