Comment vérifier la valeur de la colonne de tous les enregistrements de parent d'un enfant dans SQL

Son Nguyen:

Disons que nous avons une seule table avec 3 colonnes: ID , PARENT_ID et VALEUR .

Nous avons par exemple 8 enregistrements:

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   

Comment pouvons-nous vérifier à l'aide d'une requête SQL ou une procédure stockée (pour MySQL de préférence) le cas échéant du dossier parent pour l'enregistrement avec l'ID « G » a une valeur de 0? Si un parent de la chaîne a 0 pour la valeur, il n'y a pas besoin de vérifier plus en arrière.

Cela doit travailler en prenant une ID enfant et regard sur l'ensemble de la chaîne de ses parents , avant cet enfant. Certains enfants n'ont pas de parents ou pourrait aussi avoir une chaîne des parents et un enregistrement parent peut avoir 0 ou plusieurs enregistrements d'enfants.

Dans cet exemple, la recherche se terminerait à enregistrer avec ID « C » (à savoir: retour cet ID est très bien) car il est le dossier parent de la chaîne des parents (pour G) qui est 0 pour la valeur.

Bill Karwin:

Voici un exemple d'une requête CTE récursive MySQL 8.0 qui fait ce que vous décrivez, parcourir les ancêtres des « G » et revenir ceux qui ont une valeur = 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 |
+------+-----------+-------+

Lire https://dev.mysql.com/doc/refman/8.0/en/with.html pour plus sur les requêtes CTE récursives.

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=372799&siteId=1
conseillé
Classement