У меня проблемы с написанием SQL-запроса, чтобы найти «цикл данных» в моей таблице Firebird.
Очень сложно объяснить ситуацию, поэтому я приведу пример:
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.
Мне нужно написать запрос, чтобы определить эти «петли» в данных. Любая помощь будет оценена.
Это должен быть сложный запрос с объединениями. Я уже пробовал что-то подобное ниже, и я думаю, что я на правильном пути ..
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)