0

私のツリー構造はここに画像の説明を入力

そして、私が作成したデータベーステーブルはここに画像の説明を入力

選択クエリを作成して、ツリー構造の db テーブル内の特定のノードのすべての子ノードを取得する方法。

たとえば、優れた_emp_id = 1を渡すと、{2、3、4、5、6、7}が返されます

4

4 に答える 4

0

ここで、ネストされたクエリとセットを利用できます。

ルート ノードの子ノードを取得するには、次のクエリを試すことができます。

select *
from TABLE_NAME
where senior_emp_id in { select emp_id
                         from TABLE_NAME
                         where senior_emp_id = 1 || emp_id = 1 }

同様に、ネストされたクエリで 1 の代わりに 2 を配置すると、親ノード -2 の子ノードが必要な場合

うまくいっているかどうか教えてください..

于 2013-12-13T06:59:55.427 に答える
0
StringBuilder sql = new StringBuilder();
        sql.append("SELECT emp_id AS id, ");
        sql.append("  emp_name AS employeeName, ");
        sql.append("  title AS title, ");
        sql.append("  superior_emp_id AS parentId ");
        sql.append(" FROM T_NWM_SRVC ");
        sql.append(" WHERE superior_emp_id IS NOT NULL ");
        sql.append(" AND superior_emp_id  =");
        sql.append(parentId);

parentId : 1を渡すと、2,3 が取得されます。2,3 の子ノードを取得するには、サーバー呼び出しを再度実行する必要があります (一種の遅延読み込み)。これがあなたが探しているものであることを願っています。

于 2013-12-13T07:00:23.547 に答える
0
select * 
from employee 
where superior_emp_id = @emp_id  

union all  

select * 
from employee 
where superior_emp_id in (select emp_id 
                          from employee 
                          where superior_emp_id = @emp_id)
于 2013-12-13T06:50:34.477 に答える
0

1つのSQLステートメントでこれを行うことはできないと思います。子がさらにある場合は、指定された ID のセットを照会して追加する再帰関数を実装しようとします。プロサ:

function List<Integer> getChilds(int[] ids)
{  
List<Integer> returnValue = new ArrayList();
if(ids.length = 0)
    return returnValue;

foreach int id : ids
{
    //Build sql to get childs an execute it
    int[] childidsfromsql = em.createQuery("...").getResultList();..
    returnValue.addAll(getChilds(childidsfromsql))
}
 return returnValue;
}
于 2013-12-16T07:56:29.853 に答える