You are not logged in.

  • Login

1

Monday, January 7th 2008, 5:32pm

Spalte einer Tabelle komplett in andere Tabelle kopieren

Hallo,

ich benutze PostgreSQL und habe wie die Überschrift schon sagt den Wunsch :) einige Attribute (oder nur Eins) aus einer Tabelle komplett in eine andere Tabelle zu überführen.
Dass soll aber nur mit SQL-Mitteln erfolgen (ist dasüberhaupt möglich?)

Nach dem Motto INSERT...SELECT... funktioniert das nicht, da folgender Fehler geworfen wird:
ERROR: more than one row returned by a subquery used as an expression
SQL Status:21000


Kann mir jemand einen Rat geben?

Thx

2

Monday, January 7th 2008, 10:03pm

Das geht mit SELECT INTO... ist eigentlich eine recht simple Syntax:

SQL Code

1
SELECT SpalteQuelle INTO TabelleNeu FROM TabelleQuelle;

3

Tuesday, January 8th 2008, 9:03am

THX das klappt schon mal.

Ich musste zwar einen ALIAS benutzen, da er sonst versucht hat die Zieltabelle neu anzulegen, aber es klappt eigentlich so wie ich es wollte!
:)
Nur ein Problem ist noch geblieben: Und zwar habe ich eine Spalte namens "ID" in der Zieltabelle, die als SERIAL definiert ist. D.h. also dass sie pro Eintrag um 1 inkrementiert wird.
Diese darf ich beim "Kopieren" (Einfügen) nicht ändern.
Wenn ich nun im Select-Teil an dieser Stelle NULL setze gibts natürlich einen Fehler.
Auslassen geht aber anscheinend auch nicht.

Also am Beispiel:

SQL Code

1
INSERT INTO Benutzer SELECT (hier ist die ID-Spalte) , a.x1, a.x2, a.x3, NULL, a.x4, a.x5, NULL FROM users AS a;

This post has been edited 2 times, last edit by "Helios Co." (Jan 8th 2008, 10:46am)


4

Tuesday, January 8th 2008, 12:21pm

das ist zwar ein anderer Befehl als ich ihne gepostet habe, aber wenn es klappt, warum nicht ;)

Was passiert wenn du in eine leere Tabelle einen Eintrag mit ID=500 machst? Was wäre dann der nächste SERIAL Wert? Das solltest du überprüfen, nicht, dass es irgendwann Probleme gibt. Ansonsten kannst du den SERIAL Wert natürlich auch erhöhen.

Zu deinem Problem: Versuch mal die Spalten anzugeben. Wie genau weiß ich auch nicht.

SQL Code

1
2
INSERT INTO Benutzer (spalte1, spalte2) (SELECT .... AS a
INSERT INTO Benutzer (spalte1, spalte2) VALUES (SELECT .... AS a

5

Wednesday, January 9th 2008, 9:26am

Perfekt das funzt!
:)

Vielen dank für die schnelle und kompetente Hilfe!!!

7

Wednesday, January 9th 2008, 7:28pm

Der Erste
:)

Similar threads

Social bookmarks