7
votes

Comment obtenir des informations complètes de groupe liées à l'aide de SQL?

Dans une table appelée "mygroup" dans la base de données. J'affiche ces données de la table dans le format de l'arborescence ci-dessous: XXX

En réalité, l'exigence est que je dois visiter la racine la plus basse pour chaque groupe, si ce groupe respectif n'est pas utilisé dans d'autres des tables spécifiques alors je supprimerais cet enregistrement de la table respective.

Je n'ai besoin d'obtenir tous les détails que pour le groupe principal appelé "Vishal Group", veuillez vous reporter aux deux snaps, une contient des données de table entière et la Autre Snap (Snap, Détails du format de l'arbre) affiche les données attendues, c'est-à-dire que je n'ai besoin que de ces enregistrements à la suite d'une exécution SQL.

J'ai essayé avec une jointure auto (généralement nous faisons pour la relation de colonne MGR et employé), mais pas de succès pour obtenir les enregistrements qui relèvent du "groupe Vishal" qui est la base de tous les enregistrements.

J'ai ajouté une table DDL et insérez SQL pour référence ci-dessous. Et également attaché à la manière dont les données ressemblent à la table. xxx

aucune idée Comment obtenir des enregistrements qui tombent sous "Vishal Group"?

< un href = "https://i.stack.imgur.com/5xhcr.png" rel = "nOfollow noreferrer"> Entrez la description de l'image ici

Entrez la description de l'image ici


4 commentaires

De quel RDBMS s'agit-il? Veuillez ajouter une balise pour spécifier si vous utilisez mySQL , postgreSQL , sql-serveur , oracle ou < Code> DB2 - ou quelque chose d'autre entièrement.


Tagué à Firebird. J'utilise la base de données Firebird.


Firebird soutient des expressions de table communes récursives. Vous devriez pouvoir utiliser n'importe quel exemple de postgres: Stackoverflow.com/questions/tagged/recursive-query+Postgresq l


Il y a toujours la possibilité de construire une structure en code pour la représenter. Plutôt que d'essayer de faire quelque chose de cela compliqué dans SQL, créez simplement la structure que vous souhaitez après avoir renvoyé toute la table de SQL. Devrait être très rapide sauf si vous avez 100 000 rangées


3 Réponses :


1
votes

Vous pouvez utiliser une procédure stockée récursive comme ceci: xxx

lorsque le paramètre d'entrée est {CD1E33D1-1666-49B9 -83BE-067687E4DDD6} (pk de Vishal Group

) Le résultat est:

 Entrez la description de l'image ici

update

est-il possible d'obtenir un enregistrement "Groupe Vishal" également dans la sortie?

Oui, première lecture Vous pouvez exécuter la procédure ci-dessus dans une autre procédure comme: xxx

puis utilisez xxx

ou xxx

si vous utilisez pk_group comme paramètre


6 commentaires

Salut Val, merci pour vos précieux efforts et votre aide. Lors de l'exécution du code que vous avez fourni, je reçois une erreur comme "Fin de commande inattendue - Line 8, Colonne 20". Souhaitez-vous corriger le code?


:) .... L'erreur arrive à la ligne numéro 8 I.E. "DÉCLARE VARIABLE I INTEGER;". Je gère votre SP dans l'IDE «Flamerobin» pour vous connecter à la base de données Firebird.


Ya, cela m'a aidé à créer une procédure stockée dans Firebird. Mais Val, quand j'ai exécuté SP dans la flamerobine, comme "exécution de la procédure Mygroup_Proc" {CD1E33D1-1666-49B9-83BE-067687E4DDDD6} '", il ne me donne qu'un enregistrement comme une sortie en flamerobine.


Utilisez SELECT * à partir de MyGroup_Proc (..) comme image ci-dessus


Yesssssssssss, Val, tu es l'homme du moment. Votre SQL Just Just Rocks, Just Rocks ..... Awesome Karol, juste génial .....


Est-il possible d'obtenir un enregistrement «Groupe Vishal» également dans la sortie?



2
votes

Autre alternative plus propre à une procédure stockée récursive, voici une procédure stockée à l'aide de CTE (expressions de table communes): xxx

alors vous pouvez utiliser: xxx


0 commentaires

1
votes

Ceci est juste pour partager une connaissance, au-dessous de SQL n'est pas écrit par moi, mais je l'ai eu du groupe Firebird Yahoo. Mais je respecte hautement et j'apprécie très bien l'aide que vous m'avez donnée.

SQL: xxx

avec les meilleures salutations.

Vishal < / p>


3 commentaires

Avez-vous testé ce code? Je pense que le résultat ne sera que les lignes qui contiennent {CD1E33D1-1666-49B9-83BE-067687E4DDDD6} in linked_to_group champs. Les nœuds du champ. Mais je peux me tromper.


Oui, vous avez droit Val, les sous-nœuds sont manquants. Laisse moi voir.


Bien. Maintenant, regarde mieux. Ceci est récursif CTE (expressions de table communes) ... comme la réponse ci-dessous.