0

MySQL の SQL 結合について質問があります。

次のテーブルAと親子関係があるとします。親 ID を指定して、すべての子 (葉ノードまでの子のサブ子を含む) を取得するにはどうすればよいですか?

表 A
子ID 親ID
1 1
2 1
3 1
4 2
5 3
8 9

上記の表から、親 (1) を指定した場合、親 id(1) を指定すると、すべての階層の例が得られるようにクエリを実行する必要があります。

子ID 親ID
1 1
2 1
3 1
4 2
5 3

制限の 1 つは、データ モデルが JBPM データベース テーブル (オープン ソース) であるため、データ モデルを変更できないことです。サブプロセス (ファンアウト プロセスごと) の JBPM グラフに ProcessInstancelog テーブルの機能を追加しています。

4

2 に答える 2

1

階層内のどこにあるかに関係なく、親を選択して、そのすべての子を取得できるようにしたいようです。

最も効率的な方法は、逆関連テーブルを使用することです。ツリーのルートに到達するまで、各子がその親に関連付けられ、親に付与されます。

これは明らかに、テーブルを維持するために書き込みでより多くの作業を行う必要があることを意味しますが、テーブルのクエリの複雑さから解放されます。

id       parent
1        0
2        1
3        1
4        2

逆テーブル

child     parent    level
2         1         1
3         1         1
4         2         1
4         1         2

これにより、クエリでサブセレクトを実行できます (select child where parent = 1)

于 2011-06-19T18:09:12.110 に答える