Ergebnis 1 bis 3 von 3

Thema: Update mit Unterabfrage, die mehrere Spalten zurückliefert

  1. #1
    az_hf0 ist offline Neuer Benutzer
    Registriert seit
    15.06.2009
    Beiträge
    23

    Standard Update mit Unterabfrage, die mehrere Spalten zurückliefert

    Hallo,

    ich bin schon häufiger über eine wahrscheinlich eher leichte Frage gestolpert, auf die ich trotz Suche hier im Forum noch keine Antwort recherchieren konnte, deshalb wäre ich Euch für einen Tip dankbar.

    Es gibt eine Tabelle, z.B.
    accounts (PKEY account_id, INTEGER i1, INTEGER i2)

    Nun habe ich ein Zwischenergebnis mit einer SELECT-Abfrage generiert, das so aussieht:
    (account_id, anzahl1, anzahl2)

    Jetzt möchte ich für alle matchenden account_ids sowohl i1 = anzahl1 und i2 = anzahl2 setzen, nur leider bringe ich das nicht korrekt in der Unterabfrage hin. In meinem Fall sind das noch erheblich mehr Spalten, die ich hier zuweisen möchte.

    Code:
    UPDATE accounts SET 
    i1 = anzahl1, 
    i2 = anzahl2 
    WHERE account_id = (SELECT account_id, anzahl1, anzahl2 FROM xyz)
    Passt natürlich in der WHERE-Klausel so nicht, aber könnt ihr euch vorstellen, was ich meine?

    Ich möchte auch gerne das Zwischenergebnis nur einmal berechnen, weil die Zischenresultsets (hier das SELECT auf xyz) sehr groß und aufwändig zu berechnen sind. Also am Besten auch nicht mit mehreren Subselects wie hier:

    Code:
    UPDATE accounts a SET 
    i1 = (SELECT anzahl1 FROM xyz WHERE xyz.account_id = a.account_id), 
    i2 = (SELECT anzahl2 FROM xyz WHERE xyz.account_id = a.account_id)
    Habt ihr eine Idee?

    Danke für euren Input,
    az_hf0

  2. #2
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von az_hf0 Beitrag anzeigen
    Hallo,

    ich bin schon häufiger über eine wahrscheinlich eher leichte Frage gestolpert, auf die ich trotz Suche hier im Forum noch keine Antwort recherchieren konnte, deshalb wäre ich Euch für einen Tip dankbar.

    Es gibt eine Tabelle, z.B.
    accounts (PKEY account_id, INTEGER i1, INTEGER i2)

    Nun habe ich ein Zwischenergebnis mit einer SELECT-Abfrage generiert, das so aussieht:
    (account_id, anzahl1, anzahl2)

    Jetzt möchte ich für alle matchenden account_ids sowohl i1 = anzahl1 und i2 = anzahl2 setzen, nur leider bringe ich das nicht korrekt in der Unterabfrage hin. In meinem Fall sind das noch erheblich mehr Spalten, die ich hier zuweisen möchte.

    Code:
    UPDATE accounts SET 
    i1 = anzahl1, 
    i2 = anzahl2 
    WHERE account_id = (SELECT account_id, anzahl1, anzahl2 FROM xyz)
    Passt natürlich in der WHERE-Klausel so nicht, aber könnt ihr euch vorstellen, was ich meine?

    Ich möchte auch gerne das Zwischenergebnis nur einmal berechnen, weil die Zischenresultsets (hier das SELECT auf xyz) sehr groß und aufwändig zu berechnen sind. Also am Besten auch nicht mit mehreren Subselects wie hier:

    Code:
    UPDATE accounts a SET 
    i1 = (SELECT anzahl1 FROM xyz WHERE xyz.account_id = a.account_id), 
    i2 = (SELECT anzahl2 FROM xyz WHERE xyz.account_id = a.account_id)
    Habt ihr eine Idee?

    Danke für euren Input,
    az_hf0
    Code:
    test=# create table a (id int, a int, b int);
    CREATE TABLE
    test=# copy a from stdin;
    Enter data to be copied followed by a newline.
    End with a backslash and a period on a line by itself.
    >> 1    0       0
    >> 2    0       0
    >> 3    0       0
    >> \.
    test=# commit;
    WARNING:  there is no transaction in progress
    COMMIT
    test=# update a set a=foo.a, b=foo.b from (select 1 as id, 2 as a, 3 as b) foo where a.id=foo.id;
    UPDATE 1
    test=# select * from a;
     id | a | b
    ----+---+---
      2 | 0 | 0
      3 | 0 | 0
      1 | 2 | 3
    (3 rows)
    Prinzip erkannt? Du machst quasi einen JOIN.

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  3. #3
    az_hf0 ist offline Neuer Benutzer
    Registriert seit
    15.06.2009
    Beiträge
    23

    Standard

    Danke, Andreas.

    Genau das habe ich gesucht.

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 07.04.2010, 14:02
  2. probleme beim update / unterabfrage
    Von vollbotz im Forum SQL
    Antworten: 2
    Letzter Beitrag: 14.07.2009, 09:46
  3. Antworten: 2
    Letzter Beitrag: 26.09.2008, 17:29
  4. Antworten: 15
    Letzter Beitrag: 08.10.2007, 15:04
  5. AS für mehrere Spalten?
    Von Jeho im Forum SQL
    Antworten: 3
    Letzter Beitrag: 19.09.2007, 16:12

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum