Mittwoch, 18. Oktober 2006

Ausgabe eines SQL-SELECT-Befehls (automatisch) in eine neue Tabelle

Wie kann ich die Ausgabe eines SELECT-Befehls in einer neuen Tabelle speichern?

Problem

Manchmal möchte man das Ergebnis eines SELECT in eine neue Tabelle schreiben. Beispielsweise um das Ergebnis weiter zu verfeinern. Doch wie funktioniert das?

Lösung

Um die Ausgabe eines SELECT-Befehls in eine Tabelle zu schreiben, muss die Tabelle die gleiche Struktur wie das Ergebnis des SELECT-Befehls besitzen.

Als Beispiel werden wir den SELECT aus Listing 1 nehmen. Die dazugehörige Beispieltabelle könnt ihr Listing 2 entnehmen.

Listing 1

Download Code!

  1.  
  2. SELECT VORNAME FROM PERSON
  3.  
Listing 2

Download Code!

  1.  
  2. CREATE TABLE PERSON (
  3.   PERSNR    INTEGER PRIMARY KEY,
  4.   VORNAME   VARCHAR (50),
  5.   NACHNAME  VARCHAR (50),
  6.   ADRESSE   INTEGER REFERENCES ADRESSE
  7. );
  8.  

Wenn nun in einer zusätzlichen Tabelle die Ergebnisse des SELECT-Befehls abgelegt werden sollen, so muss man erstmal diese Tabelle anlegen. Wichtig ist hierbei, dass die Tabelle den gleichen Aufbau des Ergebnisses hat. Das bedeutet, wenn der SELECT ausgeführt wird, bekommt man eine Liste mit Vornamen der Tabelle Person. Vorname hat in der Tabelle Person den Typ VARCHAR mit einer maximalen Länge von 50 Zeichen.

Somit muss in der Zieltabelle, die Spalte die die Werte aufnehmen soll auch vom Typ VARCHAR mit der Länge 50 sein. Der dazugehörige CREATE-Befehl könnt ihr in Listing 3 sehen.

Listing 3

Download Code!

  1.  
  2. CREATE TABLE PERSON_AUSWERTUNG (
  3.   VORNAME_DER_PERSON   VARCHAR (50),
  4. );
  5.  

INSERT INTO

Nachdem die Tabelle nun angelegt ist, kann man das Ergebnis des SELECT in dieser Tabelle ablegen. Der dazugehörige SQL-Befehl steht in Listing 4.

Listing 4

Download Code!

  1.  
  2. INSERT INTO PERSON_AUSWERTUNG
  3. SELECT VORNAME FROM PERSON
  4.  

Jetzt haben wir aber ein zusätzliches Problem. Angenommen der SELECT liefert 100 verschiedene Attribute (Spalten, nicht Zeilen) zurück, dann ist doch ein Anlegen mit CREATE der totale Wahnsinn. Das ist nämlich in meinem Fall so gewesen. Nun gib es Gott sei Dank einen kleinen Trick. Mit diesem Trick ist es möglich ohne das explizite Erstellen mit CREATE eine Datenbank on-the-fly zu erstellen.

Das bedeutet ihr könnt die Ausgabe des SELECT-Befehls direkt in einer neuen Tabelle abspeichern.

INTO

Ihr fügt einfach vor dem FROM-Teil ein INTO hinzu. Das veranlasst das Datenbanksystem, automatisch eine Tabelle mit den dazugehörigen, passenden Attributen zu erstellen.

Automatisches Erstellen der Tabelle beim SELECT

Der dazugehörige SQL-Befehl, um Tabellen automatisch zu erstellen, steht in Listing 5.

Listing 5

Download Code!

  1.  
  2. -- Hier wurde ein SELECT Stern genommen um eine grosse Ergebnismenge zu simulieren.
  3. SELECT * INTO PERSON_AUSWERTUNG FROM PERSON
  4.  
Bewertung: keine, 0 Stimme(n) 4125 Klicks
Datenbank
Von Mr.Foo in Datenbank am 18.10.06@12:29 Uhr

Trackbacks
Trackback für spezifische URI dieses Eintrags

Keine Trackbacks

4 Kommentare
Ansicht der Kommentare: (Linear | Verschachtelt)

Osman - #1 - 09.06.2009 11:31 - (Antwort)

Irgendwie hat deine Vorgehensweise bei mir nicht geklappt.

Habe folgende Lösung rausgefunden
CREATE TABLE Tabellenname (
Select
*
From
XY
Where ... )

Mr. Foo - #1.1 - 09.06.2009 16:07 - (Antwort)

Hmm, welche Datenbank (MySQL, Postgres, MSSQL) hast du denn verwendet?

Osman - #1.1.1 - 10.06.2009 16:35 - (Antwort)

Server Version: MySQL 5.0.51a-3ubuntu5.2
Client: OpenSuse 11.0 , MySQL Query Browser

Mr. Foo - #1.1.1.1 - 16.06.2009 14:49 - (Antwort)

Hui,

das ist ja hart - denke mit MySQL 5 wurde das geändert. Ich habe dasselbe eben mit einer 5.0.67 Version getestet und es geht nur dann, wenn man ein CREATE TABLE davorstellt - so wie du es geschrieben hattest.


Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Sie können [geshi lang=LANG][/lang] Tags verwenden um Quellcode abhängig von der gewählten Programmiersprache einzubinden
 
 

Mr. Foo

Ausgabe eines SQL-SELECT-Befehls (automatisch) in eine neue Tabelle

  • Homepage

Suche

Kategorien

  • Android (2)
  • C-Sharp (4)
  • Datenbank (29)
  • Delphi (2)
  • Entwicklung (36)
  • Flash (5)
  • Games (10)
  • Gutscheine (4)
  • Hardware (14)
  • HTML CSS (15)
  • Internet (88)
  • Java (32)
  • Javascript (24)
  • Linkdump (9)
  • Linux (101)
  • Low-Level (10)
  • Lua (8)
  • Musik (9)
  • Netzwerk (25)
  • New World Order (109)
  • Perl (3)
  • PHP (129)
  • Magento (5)
  • Symfony (3)
  • Zend Framework (7)
  • Probleme und Lösungen (26)
  • Python (22)
  • Ressourcen (23)
  • Sicherheit (91)
  • Software (60)
  • Sonstiges (47)
  • Own Stuff (48)
  • Spass (45)
  • Technik / Wissenschaft (4)
  • Tips (15)
  • Weisheiten (17)
  • Windows (23)
  • Wort des Tages (15)


Alle Kategorien

Archive

  • Mai 2012
  • April 2012
  • März 2012
  • Das Neueste ...
  • Älteres ...

Abonnieren lohnt sich!

  • XML RSS 2.0 feed
  • ATOM/XML ATOM 1.0 feed
  • XML RSS 2.0 Kommentare

Tagcloud

Datenbank Entwicklung Internet Java Javascript Linux Lösung Netzwerk News New World Order PHP Problem Probleme und Lösungen Sicherheit Software Sonstiges Spass Tipp Update Windows

Beliebte Einträge

  • Magento ist scheisse (197)
  • Plugin-container.exe deaktivieren (107)
  • BWin Betrug und Abzocke bei Minigames? (64)
  • C compiler cannot create executables unter Debian (53)
  • Scheiss Linux - USB-Platte viel zu langsam (wenns mal funktioniert) (43)
  • Sicheres Kontaktformular mit PHP - Spam verhindern (37)
  • UML-Diagramme aus Java-Klassen generieren – Java2UML (28)
  • Es konnte keine TCP/IP-Verbindung mit dem Host hergestellt werden (28)
  • Option Bug im Internet Explorer bei Nutzung von innerHTML und Javascript (24)
  • Zend Studio - Javaw.exe lastet die CPU aus (24)

Kommentare

Oliver Riske zu Es konnte keine TCP/IP-Verbindung mit dem Host hergestellt werden
Di, 15.05.2012 20:38
Super Danke!
anon zu BWin Betrug und Abzocke bei Minigames?
Sa, 05.05.2012 18:43
ihr scheiss betrüger
Jürgen zu Unable to elevate error:1814 VLC Problem
Mi, 02.05.2012 16:54
So einfach ist es bei mir jedenfal [...]
Jonny zu BWin Betrug und Abzocke bei Minigames?
Di, 24.04.2012 13:56
Ihr seid fast alle BERTS. Kein Pla [...]
Johnny zu Plugin-container.exe deaktivieren
Sa, 21.04.2012 18:30
Cooler Trick! MFG Johnny
 

Kontakt/Informationen