Insert mit Subselect: Wie DEFAULT Keyword übergeben?

Tom.S

Fleissiger Benutzer
Beiträge
62
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:
Werbung:
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?
 
Aus irgendeinem Grund kann ich den Beitrag nicht mehr editieren. Aber richtig muss die erste WHERE-Klausel col2 >= 89 lauten.
 
Dann wird es meiner Meinung nach nur mit dynamischem SQL funktionieren, das wird deine Software aber vermutlich auch nicht mit machen.
 
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);
 
Werbung:
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.
 
Zurück
Oben