Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 17 von 17

Thema: UPDATE in INSERT Abfrage möglich?

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

    Standard

    Soweit bin ich schon
    Code:
    WITH belege AS (
    SELECT * FROM foo2
    WHERE "ID_Druck" = 1
    OR "ID_Druck" = (SELECT max("ID_Druck") FROM foo2)
    OR 0 = round(mod("ID_Druck",5000))
    )
    INSERT INTO foo2 SELECT * FROM belege
    Ich weiß nur nicht wie ich ihm in der WITH sagen soll die Belege in die Spalte einzufügen.
    Bekomm das mit INSERT TO nicht hin!

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

    Standard

    Zitat Zitat von truehumandesign Beitrag anzeigen
    Soweit bin ich schon
    Code:
    WITH belege AS (
    SELECT * FROM foo2
    WHERE "ID_Druck" = 1
    OR "ID_Druck" = (SELECT max("ID_Druck") FROM foo2)
    OR 0 = round(mod("ID_Druck",5000))
    )
    INSERT INTO foo2 SELECT * FROM belege
    Ich weiß nur nicht wie ich ihm in der WITH sagen soll die Belege in die Spalte einzufügen.
    Bekomm das mit INSERT TO nicht hin!
    Du sollst das * weglassen und stattdessen die Spalten aufzählen bzw. halt 'BELEGE' oder was halt rein soll, schau doch einfach mein Beispiel an...

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

    Standard

    Nu meckert Postgre weil ID_Druck type integer ist.
    Habs in alle möglichen Zahlentypen umgewandelt, bringt aber nix

    Code:
    ********** Fehler **********
    
    
    FEHLER: Spalte »ID_Druck« hat Typ integer, aber der Ausdruck hat Typ character varying
    SQL Status:42804
    Hinweis:Sie müssen den Ausdruck umschreiben oder eine Typumwandlung vornehmen.
    Mein Code soweit sieht ganz gut aus.. ich glaub ich versteh was du meinst Andreas

    Code:
    WITH belege AS (
    SELECT "BELEGE", 'Beleg' FROM foo
    WHERE "ID_Druck" = 1
    OR "ID_Druck" = (SELECT max("ID_Druck") FROM foo)
    OR 0 = round(mod("ID_Druck",5000))
    )
    INSERT INTO foo SELECT * FROM belege;

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

    Standard

    Habs tatsächlich noch geschafft

    Code:
    WITH belege AS (
    SELECT "ID_Druck", "LFDNR", 'Beleg' FROM foo
    WHERE "ID_Druck" = '1'
    OR "ID_Druck" = (SELECT max("ID_Druck") FROM foo)
    OR 0 = round(mod("ID_Druck",5000))
    )
    INSERT INTO foo SELECT * FROM belege;
    Wenn ich bedenke wie umständlich die erste Abfrage war
    Eins stört mich jedoch.
    Da ich öfters mal bis zu 33 Spalten habe will ich nicht immer alle einzeln im SELECT aufführen.
    Gibts da keine andere Möglichkeit? Oder eine Andere möglichkeit die Row "BELEGE" mit Belegen zu füllen.

    Danke!
    Geändert von truehumandesign (03.12.2011 um 00:06 Uhr)

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

    Standard

    Zitat Zitat von truehumandesign Beitrag anzeigen
    Habs tatsächlich noch geschafft

    Code:
    WITH belege AS (
    SELECT "ID_Druck", "LFDNR", 'Beleg' FROM foo
    WHERE "ID_Druck" = '1'
    OR "ID_Druck" = (SELECT max("ID_Druck") FROM foo)
    OR 0 = round(mod("ID_Druck",5000))
    )
    INSERT INTO foo SELECT * FROM belege;
    Wenn ich bedenke wie umständlich die erste Abfrage war
    Eins stört mich jedoch.
    Da ich öfters mal bis zu 33 Spalten habe will ich nicht immer alle einzeln im SELECT aufführen.
    Gibts da keine andere Möglichkeit? Oder eine Andere möglichkeit die Row "BELEGE" mit Belegen zu füllen.

    Danke!

    Ich gebe mal eine Geschichte aus dem Alltag bei einem Hosting-Provider wieder:

    Kunde hatte auf einer gut besuchten Seite sporadisch Fehlermeldungen. Und zwar konnte MySQL keine temp. Tabellen mehr anlegen. /var/tmp, wo dies erfolgte, war ca. 10 mal größer als die Größe aller MySQL-DBs zusammen.

    Es stellte sich raus, daß da sinngemäß folgendes Select die Ursache war:

    Code:
    select einzelne_spalte from (select * from foo) where andere_spalte = N
    (das select war komplexer, ließ sich aber darauf reduzieren)

    foo war eine Tabelle mit einigen hundertausend Zeien, jede Zeile enthielt Dutzende langer Textfelder, also vielleicht 70 lange Felder. Die einzelne_spalte war ein INT, andere_spalte (Ziel des WHERE) war der PK von foo.

    Aufgrund der hirnrissigen select * in der Klammer war MySQL genötigt, die komplette Tabelle als materialisierte temp. Tabelle zu erstellen. Laufzeit der Anfrage entsprechend.


    *Eigentlich* wollte der Kunde das Problem mit Hardware erschlagen, sein Programmiere hätte ihm das vorgeschlagen. Ich hab ihm dann erklärt, was für ein *zensiert* dieser Programmierer ist.


    Lerne: niemals select * in produktivem Code.


    Andreas
    Geändert von akretschmer (03.12.2011 um 09:38 Uhr)
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  6. #16
    ads
    ads ist offline Super-Moderator
    Registriert seit
    08.02.2006
    Ort
    MD
    Beiträge
    4.056

    Standard

    Zitat Zitat von truehumandesign Beitrag anzeigen
    Da ich öfters mal bis zu 33 Spalten habe will ich nicht immer alle einzeln im SELECT aufführen.
    Anderes Beispiel aus meiner Welt: wir machen "Big Data", sprich Data Warehousing.
    Wenn du dort ein "SELECT *" machst, zwingst du die Datenbank, alle Spalten von der Platten zu lesen.
    Im günstigsten Fall hast du pro Spalte eine Datei auf der Festplatte - durch die Angabe der einzelnen Spalten gewinnst du massiv an Performance.

    Um akretschmer zu zitieren: niemals nie und nimmer mach ein "SELECT *".
    Xandrian: Kurz gesagt: Du hast ein falsches Konzept und willst nicht auf ads hören

    Jetzt NEU: PostgreSQL - Datenbankpraxis für Anwender, Administratoren und Entwickler

    PostgreSQL Service & Support

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

    Standard

    Ok das versteh ich jetzt endlich mit der Select * From abfrage!
    Vielen Dank für die Hilfe!!
    Da ich die Abfrage sowieso in ein Python Programm schreibe werde ich alle Spaltennamen über Variablen einfügen (somit ist es weniger Tipparbeit) und die Selektion erfolgt über einen GUI.

    Gruß!

Seite 2 von 2 ErsteErste 12

Ä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