Anmelden

View Full Version : SQL Insert in schleife



Seiten : [1] 2 3

Robi
24-04-06, 15:14
hallo *all,

Kann ich mit SQL einen Datensatz mehrfach kopieren.
Bsp.:
insert into LIB/FILE_1 select Feld_a, feld_b, (select distinc(feld_x) from lib/file_2 where feld_x like '%D01'), feld_d, feld_e where ...

Der fette Teil ist eine Liste aller einzufügenden Sätze.
vielen Dank
gruß
Robi

Fuerchau
24-04-06, 19:13
Ein skalarer Subselect (dein fetter Teil) darf genau nur 1 Feld und 1 Zeile ergeben !
Wenn der Subselect keine Daten findet, wird NULL geliefert. Sollte dein Zielfeld kein NULL erlauben, musst du den Subselect noch in ein coalesce(select ... , Defaultwert) einbauen, sonst stirbt der gesamte SQL ab dem 1. fehlerhaften Satz.

Der, auf den insert folgende, Fullselect kann durchaus beliebig viele Zeilen liefern.

B.Hauser
24-04-06, 19:27
Hi,

mir fehlt irgendwo eine Tabelle in Deinem SQL-Statement.
Aber versuch mal folgendes:



insert into Lib/File_1
with x as (Select distinct(Feld_X) from Lib/File_2
where Feld_X like '%D01')
select Feld_a, Feld_b, Feld_X, Feld_d, ....
from Lib/File_3 cross join x
Where ........


Birgitta

Robi
25-04-06, 09:11
@Fuerchau
genau das wollte ich ja nicht, ich will ja mehrere Sätze einfügen.

@Birgitta
Du bist echt die größte!!
Funktioniert !!!!
irre, wie kommt man den auf so was !
Wenn es deine Zeit erlaubt kannst du dazu noch kurz etwas erklähren ?

DANKE
echt irre
Robi

B.Hauser
25-04-06, 12:59
Hi,


Wenn es deine Zeit erlaubt kannst du dazu noch kurz etwas erklähren ?


was willst Du wissen?

With x as (Select .....) ist eine Common-Table-Expression (CTE), die so etwas wie eine "temporäre View" nur für dieses eine Statement erzeugt.

CTEs sind Bestandteil des Select-Statements und werden seit Release V4R3M0 unterstützt. Für jedes Select-Statement können mehrere CTEs, die sich auch aufeinanderbeziehen können, definiert werden. (einfach with x as (Select ), y as (Select ) ...)

Die CTE war notwendig, wegen der Distinct-Anweisung.

Im eigentlichen Select-Statement wird über CROSS JOIN jeder Satz dieser CTE mit jedem Satz auf FILE_3 verknüpft.

Birgitta

Robi
25-04-06, 13:10
Danke
das mit dem CROSS JOIN war mir nicht klar, wenn ich ehrlich bin, kannte ich das garnich. Mich wunderte das ich keine verknüpfung anzugeben brauche.
Nochmals vielen Dank
Robi

Fuerchau
25-04-06, 16:45
Cross join ist die Verknüpfung jeden Satzes von Datei A mit B. Dies entspricht übrigens auch folgendem:

select * from filea, fileb

sam1502
29-09-08, 08:34
Hallo:),
ich habe eine frage bezüglich SQL, wäre schön wenn jemanden mir dabei helfen kann.

ich habe eine Tabelle mit vielen Dupplikaten drin, ich will eine SQL Anfrage schreiben, die mir die Duplikate sucht, und in einem bestimmten feld ein wert wie eins oder char wie 'Duplikat' schreiben. wie in eine Schleife.
die Tabelle sieht so aus(Beispiel):

NAME Nachname wert
Mo Do
Sa Fra
Sa Fra
Mo Do
Al x
Fa ca

ich will unter die Spalte wert irgendetwas schreiben können,

ich komme leider nicht mehr weiter, ich werde alles begrüßen, auch lösungen mit ASP bzw. ASPX

Danke im Voraus,

B.Hauser
29-09-08, 08:41
Die folgende Abfrage listet Dir alle Duplikate auf. In der 3. Spalte wird die Anzahl der Vorkommen ausgegeben


Select Name, Nachname, Count(*)
From MyTable
Group By Name, Nachname
Having count(*) > 1

sam1502
29-09-08, 11:20
Vielen Dank für die schnelle Antwort, es ist mir klar mit having count(*)>1 die Dupilkat raus zu filtern, ich will gerne jetzt im Felder die widerholt vorkommen, einen Wert einfügen wie 0 oder 1 oder char.

Vielen Dank:)