1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Insert mit Subselect: Wie DEFAULT Keyword übergeben?

Dieses Thema im Forum "PostgreSQL" wurde erstellt von Tom.S, 13 November 2015.

  1. Tom.S

    Tom.S Fleissiger Benutzer

    Hallo,
    folgendes Problem:

    Ich habe ein INSERT, dessen Daten ich mit einem SELECT hole. Für eine Spalte des INSERTS muss ich das DEFAULT-Keyword einsetzen. Vom Prinzip würde es so aussehen:

    Code:
    INSERT INTO table_a (col_1, col_2, col_3)
    VALUES (DEFAULT,
                      (SELECT col2, col3 FROM table_x WHERE col2='89'))
    
    Ergebnis einer einzigen Subquery sollte dann so aussehen:
    Code:
    INSERT INTO table_a (col_1, col_2, col_3)  VALUES (DEFAULT, 89, "Haribo")
    INSERT INTO table_a (col_1, col_2, col_3)  VALUES (DEFAULT, 195, "Kinder")
    INSERT INTO table_a (col_1, col_2, col_3)  VALUES (DEFAULT, 201, "Ferero")
    
    Das geht so nicht, weil SELECT nur eine Spalte ausgeben darf, ich aber mehrere Spalten und Zeilen mit dem SELECT hole.
    Die Alternative, ohne VALUES und mit einem Subselect zu arbeiten, hat bei mir auch nicht funktioniert, weil ich es nicht schaffe, das DEFAULT-Keyword passend weiterzureichen:

    Code:
    INSERT INTO table_a (col_1, col_2, col_3)
             (SELECT "DEFAULT", col2, col3
                    FROM
                     table_x WHERE col2='xyz'))
    
    Allerdings denke ich, dass hier die Lösung liegt und es einen Weg gibt, das DEFAULT-Keyword in der passenden Art und Weise vom SELECT ausgeben zu lassen, so dass es von der INSERT-Query als Keyword akzeptiert wird.
     
    Zuletzt bearbeitet: 13 November 2015
  2. ukulele

    ukulele Datenbank-Guru

    Er wird das DEFAULT immer als Text behandeln denn nur so kannst du es in deinem Select einbauen. Wird DEFAULT nicht auch gesetzt, wenn du im INSERT-Teil die Spalte einfach weg läßt?
     
  3. Tom.S

    Tom.S Fleissiger Benutzer

    Aus irgendeinem Grund kann ich den Beitrag nicht mehr editieren. Aber richtig muss die erste WHERE-Klausel col2 >= 89 lauten.
     
  4. Tom.S

    Tom.S Fleissiger Benutzer

    Hallo Ukulele,
    nein, das muss gesetzt werden, sonst streikt das software-generierte Eingabeformular.
     
  5. ukulele

    ukulele Datenbank-Guru

    Dann wird es meiner Meinung nach nur mit dynamischem SQL funktionieren, das wird deine Software aber vermutlich auch nicht mit machen.
     
  6. akretschmer

    akretschmer Datenbank-Guru

    wenn col_1 der Default gesetzt werden soll so laßt die Spalt einfach weg.

    test=*# insert into table_a (col1, col2) (select col2, col3 from table_x where col2 = 89);
     
  7. ukulele

    ukulele Datenbank-Guru

    Seine Anwendung gibt
    Code:
    INSERT INTO table_a (col_1, col_2, col_3)
    vermutlich fest vor. Du wirst es dann außerhalb der Anwendung lösen müssen.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden