J'ai des difficultés à écrire une requête SQL pour trouver une "boucle" de données dans ma table Firebird.Firebird SQL Requête pour trouver une boucle dans les données
Il est très difficile d'expliquer la situation, donc je vais plutôt donner un exemple:
Table: Explosion
Stockcode | IngredientStockcode
----------------------------------
001 | 010
001 | 011
001 | 012
010 | 011
010 | 013
010 | 014
012 | 013
012 | 015
012 | 001 <-- This causes a loop in my data. Stockcode 001 has an
ingredient of 012 and stockcode 012 has 001 as
an ingredient.
013 | 014
013 | 015
013 | 001 <-- This also causes a loop in my data. 013 is part of (an
ingredient of) 010. 010 is also an ingredient of 001. 001
cannot then also be an ingredient of 013.
Je dois écrire une requête pour identifier ces « boucles » dans les données. Toute aide serait appréciée.
Cela devrait être une requête complexe avec des jointures. Je l'ai déjà essayé quelque chose comme ça ci-dessous et je pense que je pourrais être sur la bonne voie ..
select * FROM explosion x1
WHERE EXISTS (SELECT 1 FROM Explosion x2
where exists (SELECT 1 FROM Explosion x3 where
x3.ingredientStockcode = x1.Stockcode
AND x1.RDB$DB_KEY < x3.RDB$DB_KEY)
and x1.ingredientStockcode = x2.Stockcode
AND x1.RDB$DB_KEY < x2.RDB$DB_KEY)
@Delpiguy: Si vous avez un moyen de déterminer les matériaux premiers ** ** dans votre stock, vous pouvez vérifier rapidement une requête récursive, mais on ne sait pas, de ce que vous publiez si vous avoir un moyen dans votre structure de le déterminer dans une requête, pas à partir de la table d'explosion affichée. – jachguate