from part
where part_id in (
select distinct part_id
from item
where item_id in (
select item_id
from system_item_structure
where status_deleted = 1
)
);
-------------- oder ------------------
SELECT DISTINCT LieferNr
FROM Lieferprogramm lp1
WHERE NOT EXITS (
SELECT TeileNr
FROM Teil t1
WHERE NOT EXITS (
SELECT LieferNr
FROM Lieferprogramm lp2
WHERE lp1.LieferNr = lp2.LieferNr
AND t1.TeileNr = lp2.TeileNr
)
);
Dies kann besser, effizienter durch eine PL/SQL-Lösung ersetzt werden:
DECLARECURSOR Lieferanten IS
SELECT DISTINCT LieferNr
FROM Lieferprogramm;
CURSOR Teile IS
SELECT DISTINCT TeileNr
FROM Lieferprogramm;
AktLief Lieferprogramm.LieferNr%Type; AktTeil Lieferprogramm.TeileNr%Type; Treffer BOOLEAN;
BEGIN
OPEN Lieferanten;
LOOP
FETCH Lieferanten INTO AktLief;
EXIT WHEN Lieferanten%NOTFOUND; Treffer := TRUE;
OPEN Teile;
WHILE Treffer LOOP
FETCH Teile INTO AktLief;
EXIT WHEN Teile%NOTFOUND;
SELECT DISTINCT LieferNr
FROM Lieferprogramm;
WHERE LieferNr = AktLief
AND TeileNr = AktTeil; Treffer := SQL%FOUND;
END LOOP;
IF Treffer THEN
INSERT INTO Temp VALUES (AktLief);
CLOSE Teile;
END Loop;
CLOSE Lieferanten;
END;