Andreas Klatt: insert...values & insert...select nicht kombinierbar?

Moin,

ich moechte meine Datenbank mit Daten fuellen.
Wenn ich die Syntax "INSERT INTO tabelle1 VALUES ('$var1', '$var2', 'wert1' ...)" benutze, muss in der Klammer nach den VALUES ein Wert oder ein Variablenname stehen.
Bei mir enstammt der Wert von $var1 einer Datenbankabfrage. Kann ich diese Datenbankabfrage direkt in meine INSERT INTO ... VALUES integrieren?
Beispiel:
"INSERT INTO tabelle1 VALUES (SELECT id FROM clients WHERE name='hubert', $var2, 'wert')"?
Genau _so_ scheint es nicht zu gehen, aber vielleicht gibt es einen anderen Weg.
Ich bedanke mich fuer jeden Tipp,

Andreas.

  1. Hallo,

    das hängt vom verwendeten Datenbanksystem ab. Fraglich ist es aber immer noch, ob es in dieser kombination überhaupt funktionieren kann.

    ich habe das unter ms-sql innerhalb eines select ausgeführt:

    SELECT * FROM tblGeraete WHERE GerTyp_ID NOT IN (select distinct GerTyp_ID from tblGerTyp) ORDER BY Verwaltungsbez1

    bei deinem insert könnte es ja durchaus vorkommen, das das select mehrere datensätze erfasst, obwohl du es eigentlich durch deine Programmierung ausgeschlossen hast...

    ich weiß nur, das mysql diese unterabfragen noch nicht unterstützt...
    bei einem insert wird es noch kritischer...

    du musst dich einfach mal über dein verwendetes dbms schlau machen und bei Möglichkeit der Nutzbarkeit von Unterabfragen die entsprechenden Hilfeseiten ansehen...

    Odium

    1. Moin,

      hatte ganz vergessen zu sagen, dass es sich bei der Datenbank um mysql handelt.

      ich weiß nur, das mysql diese unterabfragen noch nicht unterstützt...

      damit hat sich das erledigt. Ich bedanke mich.

      Andreas.

      1. Warum hat sich das dann erldigt????
        Mysql bietet sehr schöne Möglichkeiten, die eigenen (MySQL) Unzulänglichkeiten zu umgehen.
        Bei Dir fiele mir zB. die Arbeit mit temporären TAbellen ein.

        Andi

        1. Warum hat sich das dann erldigt????

          Ich wollte mir nur ein paar Zeilen Schreibarbeit ersparen. Das Arbeiten von temporaeren Tabellen klingt interessant, aber nicht fuer mein derzeitiges Projekt.
          Vielen Dank,

          Andreas Klatt.

  2. Auch Moin,

    unter der Voraussetzung, dass Du entweder Informix, Oracle oder MSSQL-Server verwendest lautet das Statement:

    Insert into tabelle1
    Select '$var2', 'wert',...., id
    from clients
    where name = 'hubert'

    Du muß weiterhin sicherstellen, dass bei der Zieltabelle kein Index oder Primary Key eingestellt ist und dass die Ergebnisszeile des Selects gleich der Anzahl der Spalten der Zieltabelle ist. Auch ist es wichtig, dass die Datentypen der Zieltabelle mit den des Selects übereinstimmen.

    Gruß
    Andi

    Moin,

    ich moechte meine Datenbank mit Daten fuellen.
    Wenn ich die Syntax "INSERT INTO tabelle1 VALUES ('$var1', '$var2', 'wert1' ...)" benutze, muss in der Klammer nach den VALUES ein Wert oder ein Variablenname stehen.
    Bei mir enstammt der Wert von $var1 einer Datenbankabfrage. Kann ich diese Datenbankabfrage direkt in meine INSERT INTO ... VALUES integrieren?
    Beispiel:
    "INSERT INTO tabelle1 VALUES (SELECT id FROM clients WHERE name='hubert', $var2, 'wert')"?
    Genau _so_ scheint es nicht zu gehen, aber vielleicht gibt es einen anderen Weg.
    Ich bedanke mich fuer jeden Tipp,

    Andreas.

    1. Ich hatte gehofft, dass ich nicht nur wie bei

      Insert into tabelle1
      Select '$var2', 'wert',...., id
      from clients
      where name = 'hubert'

      ganze Ergebnistabellen in eine Tabelle schreiben kann, sondern dass ich mittels INSERT INTO ... VALUES

      • in eine Datenbankzelle einen Wert, den ich im gleichen Moment mit SELECT ermitteln kann
      • in eine andere Datenbankzelle einen Wert wie 'text'
        schreiben kann.

      Aber das scheint bei mysql laut Odium nicht zu gehen.
      Vielen Dank.

      Andreas Klatt.

  3. Hi Andreas

    "INSERT INTO tabelle1 VALUES (SELECT id FROM clients WHERE name='hubert', $var2, 'wert')"?
    Genau _so_ scheint es nicht zu gehen, aber vielleicht gibt es einen anderen Weg.

    Was hindert dich daran bekannte Werte ins Select zu nehmen wie unten?
    SELECT id, 123, 'wert2'
      FROM ...

    und das ganze dann als INSERT INTO ... FROM/AS (resp wie es bei deinem
    DBMS genau heisst musst du halt eben nachlesen, ist nicht immer
    identisch und da du nicht gesagt hast was du verwendest...,
    ich kenne allerdings kein DBMS, dass das nicht kann).

    Gruss Daniela

    1. Hallo,

      leider verstehe ich deinen Ansatz nicht ganz, aber das liegt dann daran, dass meine Frage nicht deutlich genug gestellt war. Ich entschuldige mich und verspreche Besserung. Hab die Frage bei meiner Antwort an andi umformuliert.
      SELECT wuerde bei mir mit
      SELECT id FROM clients WHERE name='hubert'
      ein eindeutiges Ergebnis liefern, aber offensichtlich muss ich erst das Ergebnis auslesen und in eine Variable schreiben, bevor ich es in eine andere Tabelle einfuegen kann.
      Vielen Dank,

      Andreas Klatt.