Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 17

Thema: UPDATE in INSERT Abfrage möglich?

  1. #1
    truehumandesign ist offline Neuer Benutzer
    Registriert seit
    02.12.2011
    Beiträge
    9

    Standard UPDATE in INSERT Abfrage möglich?

    Hi,
    es geht bei mir um Folgendes...

    Ich habe eine Tabelle (test) mit 15 verschiedenen Spalten und darin enthaltenen Daten, alle VARCHAR(255) bis auf die Spalte ID_Druck (integer)
    Die Abfrage soll mir den Ersten, letzten und jeden 5000sten Datensatz duplizieren und in das Duplikat in die Spalte "BELEGE" einen beliebigen Textwert (hier Belege) eintragen
    Meine Abfrage funktioniert soweit gut mit dem Duplizieren der Spalten, jedoch bekomme ich es einfach nicht hin, dass nur in die Duplizierten Spalten 'Belege' eingetragen wird.
    Als Server benutze ich PostgreSQL Vesion 9.1.1-1

    Vielleicht kann mir hierbei jemand helfen

    Die Abfrage sieht folgendermaßen aus:

    WITH belege AS (
    SELECT * FROM test WHERE "ID_Druck" = 1
    UNION ALL
    SELECT * FROM test WHERE 0 = round(mod("ID_Druck",5000))
    UNION ALL
    SELECT * FROM test WHERE "ID_Druck" = (SELECT max("ID_Druck") FROM test)
    ),
    belegein AS (
    UPDATE test SET "BELEGE" = 'Beleg'
    )
    INSERT INTO test SELECT * FROM belege, belegein
    Geändert von truehumandesign (02.12.2011 um 18:14 Uhr)

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

    Standard

    Zitat Zitat von truehumandesign Beitrag anzeigen
    Hi,
    es geht bei mir um Folgendes...

    Ich habe eine Tabelle (test) mit 15 verschiedenen Spalten und darin enthaltenen Daten, alle VARCHAR(255) bis auf die Spalte ID_Druck (integer)
    Die Abfrage soll mir den Ersten, letzten und jeden 5000sten Datensatz duplizieren und in das Duplikat in die Spalte "BELEGE" einen beliebigen Textwert (hier Belege) eintragen
    Meine Abfrage funktioniert soweit gut mit dem Duplizieren der Spalten, jedoch bekomme ich es einfach nicht hin, dass nur in die Duplizierten Spalten 'Belege' eingetragen wird.
    Als Server benutze ich PostgreSQL Vesion 9.1.1-1

    Vielleicht kann mir hierbei jemand helfen

    Die Abfrage sieht folgendermaßen aus:

    Useless use of select *.

    Laß das weg, selektiere die Spalten bzw. gleich Dein Wert, also 'BELEGE', und nutze das Resultat des WITH als Quelle für das Insert.

    wCTE sind einfach geil ...


    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
    truehumandesign ist offline Neuer Benutzer
    Registriert seit
    02.12.2011
    Beiträge
    9

    Lächeln

    Zitat Zitat von akretschmer Beitrag anzeigen
    Useless use of select *.

    Laß das weg, selektiere die Spalten bzw. gleich Dein Wert, also 'BELEGE', und nutze das Resultat des WITH als Quelle für das Insert.

    wCTE sind einfach geil ...


    Andreas
    Hoi Andreas!

    Ich kann dir leider nicht ganz folgen. Kannst du das für mich bitte etwas "Einsteigerfreundlicher" erklären?
    Hab grad erst mit SQL angefangen!!

    Vielen Dank und Gruß!

  4. #4
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von truehumandesign Beitrag anzeigen
    Hoi Andreas!

    Ich kann dir leider nicht ganz folgen. Kannst du das für mich bitte etwas "Einsteigerfreundlicher" erklären?
    Hab grad erst mit SQL angefangen!!

    Vielen Dank und Gruß!
    Code:
    test=# select * from truehumandesign;
     id |   c   | t
    ----+-------+---
      1 | eins  |
      2 | zwei  |
      3 | frei  |
      4 | vier  |
      5 | fuenf |
    (5 rows)
    
    test=*# with beleg as (select c, 'NEU' from truehumandesign) insert into truehumandesign (c, t) select * from beleg;
    INSERT 0 5
    test=*# select * from truehumandesign;
     id |   c   |  t
    ----+-------+-----
      1 | eins  |
      2 | zwei  |
      3 | frei  |
      4 | vier  |
      5 | fuenf |
      6 | eins  | NEU
      7 | zwei  | NEU
      8 | frei  | NEU
      9 | vier  | NEU
     10 | fuenf | NEU
    (10 rows)
    So klar?


    Andreas, selbst select * oben im Einsatz ;-)

    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

  5. #5
    truehumandesign ist offline Neuer Benutzer
    Registriert seit
    02.12.2011
    Beiträge
    9

    Standard

    Vermutlich habe ich die Fragestellung etwas komisch geschrieben.
    Hab jetzt aber ne Query hinbekommen die dem ganzen schon eher ähnelt was ich will:

    Code:
    WITH belege AS (UPDATE foo2 SET "BELEGE" = 'Beleg'
    WHERE "ID_Druck" = 1 
    OR "ID_Druck" = (SELECT max("ID_Druck") FROM foo2) 
    OR 0 = round(mod("ID_Druck",5000))
    RETURNING *
    )
    INSERT INTO foo2 SELECT * FROM belege
    Das einzigste woran es jetzt noch hakt ist, dass er Beleg nur in die Duplizierte Spalte kopieren soll und nicht auch in die andere.
    Er fügt ja im moment überall wo 1 oder max(ID_Druck) oder jede 5000ste "ID_Druck" Belege ein

  6. #6
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von truehumandesign Beitrag anzeigen
    Vermutlich habe ich die Fragestellung etwas komisch geschrieben.
    Hab jetzt aber ne Query hinbekommen die dem ganzen schon eher ähnelt was ich will:

    Code:
    WITH belege AS (UPDATE foo2 SET "BELEGE" = 'Beleg'
    WHERE "ID_Druck" = 1 
    OR "ID_Druck" = (SELECT max("ID_Druck") FROM foo2) 
    OR 0 = round(mod("ID_Druck",5000))
    RETURNING *
    )
    INSERT INTO foo2 SELECT * FROM belege
    Das einzigste woran es jetzt noch hakt ist, dass er Beleg nur in die Duplizierte Spalte kopieren soll und nicht auch in die andere.
    Er fügt ja im moment überall wo 1 oder max(ID_Druck) oder jede 5000ste "ID_Druck" Belege ein
    Er macht das, was Du im SQL sagst. Das, was Du willst, steht in meinem SQL. Passe es Dir so an, wie Du es brauchst, das überlasse ich Dir zur Übung.

    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

  7. #7
    truehumandesign ist offline Neuer Benutzer
    Registriert seit
    02.12.2011
    Beiträge
    9

    Standard

    ARRRR... Ich mach schon den ganzen tag an dem Teil rum und raffs einfach nicht

    Nichtmal ein kleiner Hinweis?

  8. #8
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von truehumandesign Beitrag anzeigen
    ARRRR... Ich mach schon den ganzen tag an dem Teil rum und raffs einfach nicht

    Nichtmal ein kleiner Hinweis?
    Hallo? Schau ins SQL ...

    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

  9. #9
    truehumandesign ist offline Neuer Benutzer
    Registriert seit
    02.12.2011
    Beiträge
    9

    Standard

    Ja ich seh schon das er Alle Spalten die 1 oder max("ID_Druck") etc. ein "beleg" einfügt.
    Ich hab jedoch keine ahnung wie ich es umschreiben soll, das er nur in die angefügten Beleg einfügt

    Vielleicht komme ich ja hiermit auf den richtigen Weg:

    WITH belege AS (INSERT INTO foo2 ("BELEGE") VALUES ('Beleg')
    WHERE "ID_Druck" = 1
    OR "ID_Druck" = (SELECT max("ID_Druck") FROM foo2)
    OR 0 = round(mod("ID_Druck",5000))
    RETURNING *
    )
    INSERT INTO foo2 SELECT * FROM belege
    Leider akzeptiert er die abfrage nicht
    Geändert von truehumandesign (02.12.2011 um 21:40 Uhr)

  10. #10
    akretschmer ist gerade online Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von truehumandesign Beitrag anzeigen
    Ja ich seh schon das er Alle Spalten die 1 oder max("ID_Druck") etc. ein "beleg" einfügt.
    Ich hab jedoch keine ahnung wie ich es umschreiben soll, das er nur in die angefügten Beleg einfügt

    Vielleicht komme ich ja hiermit auf den richtigen Weg:



    Leider akzeptiert er die abfrage nicht
    Innerhalb von WITH belege ( ... ) machst Du ein Select mit Deiner WHERE-Condition, den Spalten, die übernommen werden sollen und den Werten, die statt der in den Spalten stehenden Werten eingesetzt werden sollen. Das Resultat hängst Du via INSERT an Deine Tabelle. Also, innerhaln von WITH belege ( ... ) muß das rausrommen, was Du anhängen willst. Kann doch nicht SOOO schwer sein, oder?


    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

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Kein Update bestehender Sätze möglich
    Von frantek im Forum SQL
    Antworten: 8
    Letzter Beitrag: 09.11.2011, 09:53
  2. Insert, Update Trigger der Update ausführt
    Von Tentoxa im Forum Trigger und Funktionen
    Antworten: 2
    Letzter Beitrag: 21.06.2010, 11:31
  3. Update/Insert
    Von MeisterU im Forum SQL
    Antworten: 2
    Letzter Beitrag: 07.05.2010, 19:07
  4. Anmeldung mit phpPgAdmin nach PostreSQL-Update nicht mehr möglich
    Von FrankImGlueck im Forum Installation von PostgreSQL
    Antworten: 4
    Letzter Beitrag: 17.04.2009, 23:00
  5. Mittels ODCB kein Insert möglich
    Von RASTADISASTA im Forum externe Schnittstellen
    Antworten: 1
    Letzter Beitrag: 06.09.2006, 10:56

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