sql >> Databasteknik >  >> RDS >> Oracle

Jag vill hitta alla chefsnamn och deras alla chefsnamn i Oracle SQL

Om jag förstått dig rätt vill du bara välja chefer.

Följande exempel är baserat på Scotts schema.

Här finns alla anställda, tillsammans med deras chefer (hierarkiskt) så att det är lättare att upptäcka cheferna.

SQL> select lpad(' ', (level - 1) * 2) || ename ename
  2  from emp
  3  start with mgr is null
  4  connect by prior empno = mgr;

ENAME
------------------------------------------------------
KING              -- manager
  JONES           -- manager
    FORD          -- manager
      SMITH       -- employee
  BLAKE           -- manager
    ALLEN         -- employee
    WARD          -- employee
    MARTIN        -- employee
    TURNER        -- employee
    JAMES         -- employee
  CLARK           -- manager
    MILLER        -- employee

12 rows selected.

SQL>

Ytterligare WHERE klausul returnerar endast förvaltare:

SQL> select lpad(' ', (level - 1) * 2) || ename ename
  2  from emp
  3  where empno in (select mgr from emp)
  4  start with mgr is null
  5  connect by prior empno = mgr;

ENAME
--------------------------------------------------------
KING
  JONES
    FORD
  BLAKE
  CLARK

SQL>

Ersätter vad väljs med SYS_CONNECT_BY_PATH , får vi en annan utdata:

SQL> select sys_connect_by_path(ename, ' / ') path
  2  from emp
  3  where empno in (select mgr from emp)
  4  start with mgr is null
  5  connect by prior empno = mgr;

PATH
----------------------------------------------------
 / KING
 / KING / JONES
 / KING / JONES / FORD
 / KING / BLAKE
 / KING / CLARK

SQL>

Eller, följ dina steg, med en självanslutning av EMP bord får vi

SQL> select m1.ename manager, m2.ename his_manager
  2  from emp m1 join emp m2 on m1.mgr = m2.empno
  3  where m1.empno in (select mgr from emp);

MANAGER    HIS_MANAGER
---------- -------------
FORD       JONES
CLARK      KING
BLAKE      KING
JONES      KING

SQL>

Välj den som passar dig bäst. Jag tror att andra medlemmar kommer att föreslå andra alternativ.




  1. Android-datahämtning från databasen fungerar inte (php + json + mysql)

  2. Hitta parameternamnen för en lagrad procedur

  3. Skillnaden mellan Select Unique och Select Distinct

  4. Bifoga ett innehållsdokument till ett anpassat Salesforce-objekt