1826 Stimmen

Einfügen in ... Werte ( SELECT ... FROM ... )

Ich versuche, die INSERT INTO einer Tabelle unter Verwendung der Eingabe einer anderen Tabelle. Obwohl dies für viele Datenbank-Engines durchaus machbar ist, scheine ich mich immer an die korrekte Syntax für die SQL Motor des Tages ( MySQL , Oracle , SQL-Server , Informix y DB2 ).

Gibt es eine Patentrezept-Syntax, die aus einem SQL-Standard stammt (z. B., SQL-92 ), die es mir ermöglichen würde, die Werte einzufügen, ohne mich um die zugrunde liegende Datenbank zu kümmern?

2 Stimmen

Dieses Beispiel funktioniert: insert into tag_zone select @tag,zoneid,GETDATE(),@positiong.STIntersects(polygon) from zone

21voto

RameezAli Punkte 916

Einfaches Einfügen, wenn die Reihenfolge der Tabellenspalten bekannt ist:

    Insert into Table1
    values(1,2,...)

Einfaches Einfügen mit Erwähnung der Spalte:

    Insert into Table1(col2,col4)
    values(1,2)

Masseneinfügung, wenn die Anzahl der ausgewählten Spalten einer Tabelle (#Tabelle2) gleich der Einfügetabelle (Tabelle1) ist

    Insert into Table1 {Column sequence}
    Select * -- column sequence should be same.
       from #table2

Masseneinfügung, wenn Sie nur in die gewünschte Spalte einer Tabelle (Tabelle1) einfügen möchten:

    Insert into Table1 (Column1,Column2 ....Desired Column from Table1)  
    Select Column1,Column2..desired column from #table2
       from #table2

17voto

Ciarán Bruen Punkte 5051

Hier erfahren Sie, wie Sie aus mehreren Tabellen einfügen können. In diesem Beispiel handelt es sich um eine Mapping-Tabelle in einem Many-to-Many-Szenario:

insert into StudentCourseMap (StudentId, CourseId) 
SELECT  Student.Id, Course.Id FROM Student, Course 
WHERE Student.Name = 'Paddy Murphy' AND Course.Name = 'Basket weaving for beginners'

(Ich weiß, dass der Abgleich mit dem Namen des Schülers mehr als einen Wert ergeben könnte, aber Sie verstehen schon, was ich meine. Ein Abgleich auf etwas anderes als eine Id ist notwendig, wenn die Id eine Identitätsspalte ist und unbekannt ist).

17voto

SWATI BISWAS Punkte 217

Hier ist ein weiteres Beispiel, bei dem die Quelle aus mehr als einer Tabelle entnommen wird:

INSERT INTO cesc_pf_stmt_ext_wrk( 
  PF_EMP_CODE    ,
  PF_DEPT_CODE   ,
  PF_SEC_CODE    ,
  PF_PROL_NO     ,
  PF_FM_SEQ      ,
  PF_SEQ_NO      ,
  PF_SEP_TAG     ,
  PF_SOURCE) 
SELECT
  PFl_EMP_CODE    ,
  PFl_DEPT_CODE   ,
  PFl_SEC         ,
  PFl_PROL_NO     ,
  PF_FM_SEQ       ,
  PF_SEQ_NO       ,
  PFl_SEP_TAG     ,
  PF_SOURCE
 FROM cesc_pf_stmt_ext,
      cesc_pfl_emp_master
 WHERE pfl_sep_tag LIKE '0'
   AND pfl_emp_code=pf_emp_code(+);

COMMIT;

15voto

Bharath theorare Punkte 478

Sie können dies versuchen, wenn Sie alle Spalten einfügen möchten, indem Sie SELECT * INTO Tisch.

SELECT  *
INTO    Table2
FROM    Table1;

0 Stimmen

Nicht von H2 unterstützt

14voto

Grungondola Punkte 660

Ich bevorzuge in SQL Server 2008 die folgende Vorgehensweise:

SELECT Table1.Column1, Table1.Column2, Table2.Column1, Table2.Column2, 'Some String' AS SomeString, 8 AS SomeInt
INTO Table3
FROM Table1 INNER JOIN Table2 ON Table1.Column1 = Table2.Column3

Damit entfällt der Schritt des Hinzufügens des Satzes Einfügen (), und Sie wählen einfach aus, welche Werte in die Tabelle aufgenommen werden sollen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X