PDA

View Full Version : SQL Problem mit create table und doppelten Feldnamen



post
19-10-12, 08:35
Hallo zusammen,

ich versuche mit
"create table neuetabelle as ( select * .... ) with data"
eine neu datei per SQL zu erstellen.

In dem select statement joine ich mehrer tabellen (jeder tabelle gebe ich einen alias).
Nun habe ich das Problem, dass die verschiedenen Tabellen tw. die gleichen Feldnamen haben.
Ich bekomme immer die Fehlermeldung:"Spaltenliste erforderlich."
Wenn ich beim select einzelnen Spalten auswähle funktioniert es auch, aber sobald eine Spalte doppelt vorkommt wird der SQL nicht ausgeführt.

=> Da es sehr umständlich ist jede Spalte explizit mit einem alias zu versehen, würde ich gerne wissen ob es möglich ist jeder Spalte aus Tabelle A und B und C automatisch einen alias zu geben.
Ich stelle mir das so vor: Alle Feldnamen aus Tabelle A mit A... beginnen usw...

Danke

Gruß
Michael

andreaspr@aon.at
19-10-12, 08:49
Du kannst dir ein Hilfsprogramm schreiben dass dein CREATE TABLE zusammenbastelt.
Die Spaltennamen kannst du über die System-View SYSCOLUMNS oder ähnliche in einer Schleife einlesen.

lg Andreas

Fuerchau
19-10-12, 09:06
Da musst du leider die Namen entsprechend eindeutig machen:

create table neuetabelle as (
select
a.f1 as a_f1,
b.f1 as b_f1,
:
from mytable1 a
join mytable2 b on a.key=b.key ...
) with data

Eine andere Chance hast du da leider nicht.
Wenn du nur die Namen einer Tabelle umbenennen musst geaht das auch so:

select a.*, b.f1 as b_f1 ...

post
19-10-12, 09:16
hallo andreas,

danke das wäre bestimmt eine möglichkeit aber ist auch ziemlich aufwendig; gibts da nix einfacheres :confused:

in einem qry ist es doch auch so, dass wenn ich 2 tabellen joine welche die gleichen feldnamen haben macht er automatisch in der ausgabe datei
datum und datum01, kndnr und kndnr01 usw...
=> das 'muß' doch auch irgendwie mit SQL direkt funktionieren ??


Tabelle A besteht z.B. aus Feld kndnr / name / datum
Tabelle B besteht aus
kndnr / pos / artnr
Tabelle C besteht aus
kndnr / preis / datum

bei dem SQL hab ich nun das problem, dass wenn ich select * mache kann kein create table ausgeführt werden da ja die feldnamen kndnr, datum mehrmals vorkommen.

ich könnte es umgehen, indem ich sage
create table.... ( select a.*, b.kndnr as bkndnr, c.kndnr as ckndnr, c.datum as cdatum ......... ) with data
aber ist halt sehr aufwending da meine tabellen ca 100 felder haben.

gruß
michael

post
19-10-12, 09:18
hallo herr fürchau,

danke
ist ja blöd :mad:

Fuerchau
19-10-12, 09:41
Nein ist es nicht.
SQL sollte immer qualifiziert arbeiten.
Wenn ich embedded SQL oder STRSQL verwende, generiert die SQL-Schicht im Resultset eindeutige Namen für den Zugriff.
Bei berechneten Feldern sogar nur Namen als Digits(Position im Resultset) wenn kein Name definiert wurde.

Anders sieht es natürlich beim CREATE TABLE aus, hier wird zuerst die Definition ausgeführt und danach erst das Resultset gebildet.
Im Prinzip fasst eben der "Create Table as ..." zwei Befehle zusammen:
1. Create Table
2. Insert into ... select ... from
Daher ist eben eine explizite Benamung erforderlich.