Abfrage mit 2 Variablen - Wert ersetzen

Otsche

Neuer Benutzer
Beiträge
3
Hallo,

meine SQL Kenntnisse sind leider nur extrem rudimentär und ich muss in einer riesigen Tabelle mit einem Befehl und den Wert einer Spalte ersetzen, es soll aber nur ersetzt werden wenn 2 andere Bedingungen gegeben.

In der Tabelle "article_attribute" sind für verschiedene Artikel gleich mehrere Eigenschaften mit unterschiedlichen Werten hinterlegt

Es gibt die Spalte "Article_ID" als Zuordnung für den Artikel, dann eine Zeile für die Eigenschaft "label" und eine für den Wert "value"
hier mal exemplarisch:

articleID = 5 / label= Farbe / value=rot
articleID = 5 / label= Marke / value=Weihnachtstraum
articleID = 5 / label= Anlass / value=Weihnachten

articleID = 6 / label= Farbe / value=blau
articleID = 6 / label= Marke / value=Weihnachtstraum
articleID = 6 / label= Anlass / value=Weihnachten

articleID = 7 / label= Farbe / value=blau
articleID = 7 / label= Marke / value=Rimowa
articleID = 7 / label= Anlass / value=Reisen

Ich muss jetzt für alle Artikel die beim label "Anlass" den value "Weihnachten" haben, beim label "Marke" diese in "Christmas Paradise" ändern, dass es quasi so danach aussieht:

articleID = 5 / label= Farbe / value=rot
articleID = 5 / label= Marke / value=Christmas Paradise
articleID = 5 / label= Anlass / value=Weihnachten

articleID = 6 / label= Farbe / value=blau
articleID = 6 / label= Marke / value=Christmas Paradise
articleID = 6 / label= Anlass / value=Weihnachten

articleID = 7 / label= Farbe / value=blau
articleID = 7 / label= Marke / value=Rimowa
articleID = 7 / label= Anlass / value=Reisen


Es wäre wirklich nett, wenn mir jemand helfen und die entsprechende Syntax posten könnte

mfg
Daniel
 
Werbung:
Der Befehl, den Du suchst, ist UPDATE. Da wir die Spalten Deiner Tabelle nicht kennen hier zumindest die Syntax:

Code:
postgres=# \h update
Command:     UPDATE
Description: update rows of a table
Syntax:
[ WITH [ RECURSIVE ] with_query [, ...] ]
UPDATE [ ONLY ] table_name [ * ] [ [ AS ] alias ]
    SET { column_name = { expression | DEFAULT } |
          ( column_name [, ...] ) = [ ROW ] ( { expression | DEFAULT } [, ...] ) |
          ( column_name [, ...] ) = ( sub-SELECT )
        } [, ...]
    [ FROM from_item [, ...] ]
    [ WHERE condition | WHERE CURRENT OF cursor_name ]
    [ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]

URL: https://www.postgresql.org/docs/16/sql-update.html
 
Code:
postgres=# select * from otsche ;
 aid | label  |   value   
-----+--------+-----------
   5 | farbe  | rot
   5 | marke  | xmastraum
   5 | anlass | xmas
   6 | farbe  | blau
   6 | marke  | bla
   6 | anlass | reisen
(6 rows)
postgres=# with id as (select aid from otsche where label = 'anlass' and value='xmas') update otsche set value='neu' where label = 'marke' and aid in (select aid from id);
UPDATE 1
ostgres=# select * from otsche order by aid, label;
 aid | label  | value  
-----+--------+--------
   5 | anlass | xmas
   5 | farbe  | rot
   5 | marke  | neu
   6 | anlass | reisen
   6 | farbe  | blau
   6 | marke  | bla
(6 rows)

postgres=#

Mahlzeit.
 
die Spalten heißen wirklich exakt so wie ich es geschrieben habe "articleID" "label" und "value"
 

Anhänge

  • spalten.jpg
    spalten.jpg
    112,8 KB · Aufrufe: 5
  • musterartikel.jpg
    musterartikel.jpg
    232 KB · Aufrufe: 6
Werbung:
Zurück
Oben