У меня возникли проблемы с написанием SQL-запроса, чтобы найти «цикл» данных в моей таблице Firebird.Firebird SQL Query, чтобы найти цикл в данных
Его очень трудно объяснить ситуацию, поэтому я скорее приведу пример:
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)
@Delpiguy: ЕСЛИ у вас есть способ, чтобы определить ** простые материалы ** в вашем складе, вы можете быстро проверить с помощью рекурсивного запроса, но не ясно, от того, что вы размещаете если вы иметь способ в своей структуре определить это в запросе, а не из показанной таблицы взрыва. – jachguate 2010-11-29 16:28:51