Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.431 Beiträge
 
Delphi 7 Professional
 
#18

AW: Mehrfach Update Statement

  Alt 6. Jul 2019, 12:04
So wie ich das sehe ist die where-Klausel nicht richtig konstruiert. oaagnr ist doch für alle Zeilen, die upgedated werden sollen, gleich (10 im obigen Beispiel), oder. Daher gehört diese Bedingung in die where-Klausel, nicht in die when-Klauseln für das Case statement. Mit deinem obigen Konstrukt findet die Query auch Zeilen, die zwar die gewünschte waaaunr und waaupo-Werte haben, aber andere oaagnr-Werte. Die werden upgedatet, nur halt mit NULL da keines der when-Klauseln auf die Zeile Matcht.

Delphi-Quellcode:
update as400 set
  sequence = case
      when concat(waaunr,'-',waaupo) ='408216-0then 1
      when concat(waaunr,'-',waaupo) ='408217-0then 2
      when concat(waaunr,'-',waaupo) ='408218-0then 3
  end,
  frozen = case
      when concat(waaunr,'-',waaupo) ='408216-0then 1
      when concat(waaunr,'-',waaupo) ='408217-0then 1
      when concat(waaunr,'-',waaupo) ='408218-0then 0
  end,
  plan_date = case
      when concat(waaunr,'-',waaupo) ='408216-0then '2019-07-05'
      when concat(waaunr,'-',waaupo) ='408217-0then '2019-07-05'
      when concat(waaunr,'-',waaupo) ='408218-0then '2019-07-06'
  end
where concat(waaunr,'-',waaupo) in ('408216-0', '408217-0', '408218-0')
  and (oaagnr =10)
Wer auf diese Spaltennamen gekommen ist gehört übrigens standrechtlich erschossen.
Erscheint mir noch zu kompliziert.
Falls waaunr Integer, dann Hochkommas weg!!!
SQL-Code:
update as400 set
  sequence = case
      when waaunr = '408216then 1
      when waaunr = '408217then 2
      when waaunr = '408218then 3
  end,
  frozen = case
      when waaunr = '408216then 1
      when waaunr = '408217then 1
      when waaunr = '408218then 0
  end,
  plan_date = case
      when waaunr = '408216then '2019-07-05'
      when waaunr = '408217then '2019-07-05'
      when waaunr = '408218then '2019-07-06'
  end
where waaunr in ('408216', '408217', '408218')
  and waaupo = 0
  and oaagnr = 10
Concats in Wherebedingungen machen das nur langsamer, da kaum ein Index genutzt werden kann. Mag bei kleinen Datenmengen ok sein, aber allgemein lieber eher nicht.

Und so, wie man in 'ner Wherebedingung mehrere Vergleiche per And oder per Or verknüpfen kann, kann man das auch im When. Sind mehrere Spalten bei einem When zu vergleichen, dann ist der Vergleich als Zeichenfolge via Concat eher die schlechtere Alternative.
  Mit Zitat antworten Zitat