sql >> データベース >  >> RDS >> Oracle

OracleSQLですべてのマネージャー名とそのすべてのマネージャー名を検索したい

    私があなたを正しく理解していれば、あなたはマネージャーだけを選びたいと思うでしょう。

    次の例は、スコットのスキーマに基づいています。

    マネージャーを見つけやすくするために、すべての従業員とそのマネージャーを(階層的に)ここに示します。

    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>
    

    追加のWHERE 句はマネージャーのみを返します:

    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>
    

    を置き換える SYS_CONNECT_BY_PATHで選択されています 、別の出力が得られます:

    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>
    

    または、手順に従って、EMPを自己結合します テーブル、取得

    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>
    

    あなたに最も適したものを選んでください。他のメンバーが他のオプションを提案すると思います。




    1. C#で参照カーソルを返すOracle関数を実行します

    2. Oracleユーザー定義タイプへのJPAマッピング

    3. 大規模なMySQLデータベースの移動とバックアップ

    4. Sysbenchを使用してMySQLでシャードテーブルのテストデータを生成する