Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL - Felder in gleiche Tabelle kopieren - anderer Schlüssl (https://www.delphipraxis.net/129505-sql-felder-gleiche-tabelle-kopieren-anderer-schluessl.html)

Umasu007 20. Feb 2009 09:14

Datenbank: SQL • Zugriff über: SQL Management

SQL - Felder in gleiche Tabelle kopieren - anderer Schlüssl
 
Hallo Leute!

Ich bin gerade an einer Abfrage kurz vor dem Verzweifeln.
Ich bin noch SQL - Anfänger und muss etwas erledigen für einen Kunden.

Und zwar sieht das folgendermaßen aus.

Ich habe einen Satz in einer Tabelle in der der Primärschlüssel die Kundennummer ist.

Diesen Satz muss ich jetzt für alle Kunden in die selbe Tabelle bringen.

Bei einem einzigen Kunden ist dieser Satz angelegt aber diesen muss ich jetzt kopieren für alle Kunden.

Das ist der Satz den ich habe:

10110 1 1 Rabatt 904100 0 1 0 1 4.50 1 50.00

10110 ist die Kundennummer! Die Felder müssen jetzt bei allen Kunden gleich sein, bis auf das erste Feld (10110). Da müssen die anderen Kundennummer drin stehen!

Wie mach ich das am Besten?

Danke schonmal

mkinzler 20. Feb 2009 09:21

Re: SQL - Felder in gleiche Tabelle kopieren - anderer Schlü
 
Z.B.
SQL-Code:
Insert into ... select
Btw. Ich würde einen syntetischen Schlüssel nehmen

Umasu007 20. Feb 2009 09:25

Re: SQL - Felder in gleiche Tabelle kopieren - anderer Schlü
 
Das hab ich versucht:

INSERT INTO KundenRechRab
SELECT *
FROM KundenRechRab
WHERE KundenNr = '10110'

und da kommt immer wieder die Verletztung des Primary Key.
Wie sag ich dem, dass er das für alle Kunden machen soll

mquadrat 20. Feb 2009 09:28

Re: SQL - Felder in gleiche Tabelle kopieren - anderer Schlü
 
Du hast zwei Probleme:

- So wie es da steht versucht du immer die gleiche Kundennummer zu inserten --> PK Violation
- Du könntest nun einfach die PK Spalte im Insert weglassen --> PK Violation

Was soll denn als Kundennummer bei den neuen Datensätzen eingetragen werden?

Umasu007 20. Feb 2009 09:32

Re: SQL - Felder in gleiche Tabelle kopieren - anderer Schlü
 
Da müssen alle Kundennummer rein, die ich bei mir in der Tabelle "Kunden" habe.

Das bedeutet, dass ich aus der Tabelle Kunden mir die ganzen Kundennummern rausnehme und da im Insert an der ersten Stelle einfügen will!

nahpets 20. Feb 2009 09:33

Re: SQL - Felder in gleiche Tabelle kopieren - anderer Schlü
 
Hallo,

so könnte das gehen:
SQL-Code:
insert into KundenRechRab /* die Tabelle, die für jeden Kunden einen Satz mit KundenNr 1 1 Rabatt 904100 0 1 0 1 4.50 1 50.00 enthalten soll */
select KundenNr,
1 as Spalte1,
1 as Spalte2,
'Rabatt' as Spalte3,
904100 as Spalte4,
0 as Spalte5,
1 as Spalte6,
0 as Spalte7,
1 as Spalte8,
4.50 as Spalte9,
1 as Spalte10,
50.00 as Spalte11
from Kunden /* diese Tabelle muss alle Kundennummern enthalten */
Spalte1 bis Spalte11 ersetzt Du bitte durch die Namen Deiner Zieltabelle.

Eine Alternative wäre:
SQL-Code:
select Kunden.KundenNr, KundenRechRab.Spalte2 ... Spalte11 from Kunden, KundenRechRab
Dies setzt voraus, dass die Tabelle KundenRechRab genau eine Zeile (nämlich 10110 1 1 Rabatt 904100 0 1 0 1 4.50 1 50.00) enthält.
Hier wird ein kartesisches Produkt zwischen dieser einzeiligen Tabelle und der Kundentabelle erstellt, mit der Folge, dass für jeden Kunden eine Zeile im Ergebnis steht, die aus
Code:
Kundennummer 1 1 Rabatt 904100 0 1 0 1 4.50 1 50.00
besteht.
Mit
SQL-Code:
insert into Zieltabelle select Kunden.KundenNr, KundenRechRab.Spalte2 ... Spalte11 from Kunden, KundenRechRab where kunden.kundenNr <> 10110
kannst Du die Daten in die Zieltabelle übernehmen.
Anstelle von
Code:
KundenRechRab.Spalte2 ... Spalte11
machst Du bitte eine Spaltenliste entsprechend 10110 1 1 Rabatt 904100 0 1 0 1 4.50 1 50.00 mit Ausnahme der KundenNr, also eine Liste der Spaltennamen zu 1 1 Rabatt 904100 0 1 0 1 4.50 1 50.00.

[EDIT]hat Schreibfehler gefunden[/EDIT]

Umasu007 20. Feb 2009 09:57

Re: SQL - Felder in gleiche Tabelle kopieren - anderer Schlü
 
Danke! Echt Super!

Vielen Dank


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz