彼のグエン:
:私たちは3列を持つ単一のテーブル持っていると言うことができますID、PARENT_IDおよびVALUEを。
ここでは、例8つのレコードを持っています:
ID PARENT_ID VALUE
A NULL 1
B A 1
C B 0
D C 1
E D 1
F E 1
G F 1
H G 0
どのように我々は、SQLクエリまたはストアドプロシージャを使用して確認することができます(MySQL用好ましい)ID「G」でレコードの親レコードのいずれかの値が0の場合はどうなりますか?チェーンから親がVALUEのために0を持っている場合は、さらにバックをチェックする必要はありません。
これは、その親のチェーン全体ですべての子IDと見てとることで仕事に持って前に、その子。いくつかの子供には親を持つことができなかったか、また、親のチェーンを持っている可能性があり、親レコードが0または多数の子レコードを持つことができます。
それはVALUEのために0である(G用)親のチェーンの親レコードであるため、この例では、検索は、ID「C」(IDは大丈夫であることをリターンIE)を持つレコードで終わるだろう。
ビルKarwin:
ここでは説明は何のMySQL 8.0再帰CTEクエリの例ですが、「G」の祖先を横断し、= 0の値を持つものを返します。
with recursive cte as (
select * from mytable where id = 'G'
union all
select t.* from cte join mytable t on t.id = cte.parent_id
) select * from cte where value = 0;
+------+-----------+-------+
| id | parent_id | value |
+------+-----------+-------+
| C | B | 0 |
+------+-----------+-------+
読むhttps://dev.mysql.com/doc/refman/8.0/en/with.htmlを再帰CTEクエリの詳細のために。