SQLでの子供のすべての親レコードの列の値を確認する方法

彼のグエン:

:私たちは3列を持つ単一のテーブル持っていると言うことができますIDPARENT_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クエリの詳細のために。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=372797&siteId=1