Zitat von
Gruber_Hans_12345:
Hi
Also, in der ARTIKEL Tabelle sind über 2000 Datensätze
in der MATERIAL Tabelle sind so 10-20 Datensaätze, also wäre es eventuell geschickter noch ein WHERE fürs UPDATE zu machen, damit nicht alle Artikel geupdatet werden oder ?
SQL-Code:
UPDATE ARTIKEL SET GEPLANT = GEPLANT +
coalesce(SELECT SUM(MENGE) FROM MATERIAL
WHERE MATERIAL.ARTIKEL = ARTIKEL.ID AND MATERIAL.TEIL = 1), 0) WHERE ID IN (SELECT ARTIKEL FROM MATERIAL WHERE TEIL = 1);
oder kann man das noch elegenater lösen ?
Ich denke nicht, dass du damit eine bessere Performance erzielst, da der Server trotzdem für jeden Record aus Taberlle Artikel das IN - Statement ausführen muss. Du vermeidest allerdings so Lock - Konflikte, da nich so viel Updates gefeuert werden.
Hier würde ich eine Procedure schreiben, wo du einen group select über Material machst und diesen dann durchläufst und Artikel updatest.
Ungetestet:
SQL-Code:
CREATE PROCEDURE UPDATE_ARTIKEL_GEPLANT
AS
DECLARE VARIABLE ID INTEGER;
DECLARE VARIABLE MENGE INTEGER;
begin
for select artikel, sum(menge) from material
where teil=1
group by artikel
into :id, :menge
do
update artikel set geplant = geplant + :menge
where id = :id;
end
Cu, Frank