sql >> Databáze >  >> RDS >> Oracle

Chci najít jména všech manažerů a jejich jména všech manažerů v Oracle SQL

Pokud jsem to správně pochopil, chcete vybrat pouze manažery.

Následující příklad je založen na Scottově schématu.

Zde jsou všichni zaměstnanci spolu s jejich manažery (hierarchicky), aby bylo snazší je najít.

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>

Další WHERE klauzule vrací pouze manažery:

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>

Nahrazení co se vybírá pomocí SYS_CONNECT_BY_PATH , dostaneme jiný výstup:

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>

Nebo podle vašich kroků pomocí vlastního připojení k EMP stůl, dostaneme

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>

Vyberte si ten, který vám nejlépe vyhovuje. Věřím, že ostatní členové navrhnou další možnosti.




  1. Export do CSV a komprimace pomocí GZIP v postgresu

  2. SQLAlchemy JSON jako blob/text

  3. jak vyřešit Obecnou chybu:2014 Nelze provádět dotazy, dokud jsou aktivní ostatní dotazy bez vyrovnávací paměti. pomocí připojení PDO

  4. Doktrína 2:Nelze aktualizovat sloupec DateTime na SQL Server 2008apm