SQL-Befehl

Ich hab ein kleines Problemchen.
Und zwar geht es um einen SQL Befehl.

Ich habe eine Tabelle und will dort einen neuen Satz anlegen mit INSERT INTO Tabelle

In diesen INSERT-Befehl möchte ich 2 SELECT_Befehle unterbringen die aber auf die gleiche Tabelle zugreifen.

Also die Tabelle heißt IMPORT.
Geht das überhaupt was ich will?
Oder muss ich erst die 2 SELECTS machen und die Ergebnisse dann in den INSERT Befehl setzten? Also ich mein des geht schon irgendwie!!

Hier ist der SQL-Befehl:

Code:
INSERT INTO IMPORT (BEZEI, TAB, FELD, BEZLFD, BEZNR, LFDNR)
VALUES ('Aufbau3', 'FIBADR', 'FANAME1', 1,
(SELECT COUNT(*) + 1 AS BEZNR FROM IMPORT WHERE BEZLFD = 1),
(SELECT COUNT(*) + 1 AS LFDNR FROM IMPORT))
 
Probier doch einfach aus ob's geht ;)
Wenn ja gehts, wenn nein nicht!
Denke aber eher nicht...

Ach ja. Es gibt (Tabellen-) Namen, die man nicht benutzen sollte. Ich meine 'import' wäre einer davon!
 
-_-

Ich hab es schon oft genug versucht aber es geht einfach net.
Ich kann die Tabelle nennen wie ich will und es geht nicht.
Und wieso sollte ich die Tabelle nicht IMPORT nennen?

Das Problem ist MSACCESS stürtzt ab wenn ich den Befehl laufen lasse.

Ich hab des Problem schon gelöst (erst die 2 SELECT und dann den INSERT mit den Werten der SELECTS) aber ich will des in einem SQL Befehl haben. Ich hoffe des geht irgendwie und mir kann einer helfen!
 
Wie gesagt, ich denke nicht dass das geht!
Warum _muss_ es denn unbedingt ein Befehl sein?

Manche Namen sollte man nicht benutzen, da sie reserviert sind (z.b. für Befehle). Dadruch _kann_ es zu Problemen kommen, _muss_ aber nicht. Daher am besten einfach nicht benutzen (z.b. verhindern durch vorranstellen eines buchstabens o.ä.: S_IMPORT)
 
die Tabelle heißt auch FIBIMPORT ^^ (Fibu Import)
habs hier halt nur in kurzform reingeschrieben ;)

Das ganze sollte ein IMPORT-Programm für eine FIBU Software werden.
Und es funktioniert ja auch alles. Nur hätte es mich interessiert ob es geht ;)
 
Achja und es geht wie gesagt um ACCESS-SQL/ MSSQL usw.
aber nicht MySql. Deine Links haben mir gar nicht weitergeholfen.

Aber gut. Hab des Problem sowieso ganz anderst gelöst. Noch viel einfach und schneller, und besser ;)
 
Ich hab die Tabelle anderst Strukturiert und arbeite dann jetzt mit Schleifen und Arrays.

Ich programmiere in Smalltalk. Willst mein Code sehn?
 
Also erst mal hab ich die Tabelle gekürzt.
Weil die LFDNR und BEZNR brauche ich gar nicht ;)

Dann mein Code:

Code:
1 to: (listArrayValue size) do:
[ :ivar|
	
	sqlStr := 'INSERT INTO FIBIMPORT'.
	sqlStr := sqlStr ++ '(BEZEI, TAB, FELD, BEZLFD)'.
	sqlStr := sqlStr ++ 'VALUES ('.
	sqlStr := sqlStr ++ (bez) + ','.
	sqlStr := sqlStr ++ (tabellenName asDBString) + ','.
	sqlStr := sqlStr ++ ((listArrayValue at: ivar) asDBString) + ','.
	sqlStr := sqlStr ++ (ivar asNumber) + ')'.
	result := DB execSql: sqlStr.
	(result ~= 0) ifTrue:
	[
		fehler := 1.
	].
		
].

So siehts ungefähr aus. Also das ist jetzt nur der Teil für den INSERT-Befehl. Ihr könnt damit glaube ich sowieso net viel anfangen weil ihr net wirklich wisst für was die Tabelle da ist. Naja ich erklärs euch mal:

Ich will Daten in die Finanzbuchhaltungsdatenbank importieren und hab dafür ein Import-Programm gecodet.
In diesem Import-Programm kann man Dateiaufbau-Sätze speichern und die werden in dieser Tabelle FIBIMPORT gespeichert.

Ich hoffe das ist verständlich genug :)
 
Original von AaFreak
Achja und es geht wie gesagt um ACCESS-SQL/ MSSQL usw.
aber nicht MySql. Deine Links haben mir gar nicht weitergeholfen.

Aber gut. Hab des Problem sowieso ganz anderst gelöst. Noch viel einfach und schneller, und besser ;)

Sicherlich... Aber die MySQL befehle sind ja meist ziemlich die selben!
 
hmm..., war da nicht mal was in irngendeiner Hochoffiziellen Doku gestanden?!?

So in der art(?):

a = SELECT X FROM Y WHERE Z = "blabla";
b = SELECT U FROM T WHERE S = "RTFM!";

INSERT INTO IMPORT(feld1,feld2) VALUES(@a,@b);

?!?
;)
 
Code:
INSERT INTO IMPORT (BEZEI, TAB, FELD, BEZLFD, BEZNR, LFDNR)
VALUES ('Aufbau3', 'FIBADR', 'FANAME1', 1,
(SELECT COUNT(*) + 1 AS BEZNR FROM IMPORT WHERE BEZLFD = 1),
(SELECT COUNT(*) + 1 AS LFDNR FROM IMPORT))

Das geht eher so:

Code:
INSERT INTO IMPORT (BEZEI, TAB, FELD, BEZLFD, BEZNR, LFDNR) SELECT 'Aufbau3', 'FIBADR', 'FANAME1', 1, COUNT(*) + 1, count(*) + 1 FROM IMPORT WHERE BEZLFD = 1

Das select müsste man wohl noch etwas verfeiern, aber so wäre zumindest der Ansatz richtig.

mysql insert select <- erster Treffer

(und auch wenn es mit einem anderen Programm gesehen soll ist das mysql Handbuch oft eine sehr gute Quelle)
 
@ zwirni
so weit war ich auch schon
aber es geht nicht!

Die Ziel-Tabelle des INSERT-Statements darf nicht in der FROM-Klausel des SELECT-Teils der Anfrage erscheinen, weil es in ANSI-SQL verboten ist, aus derselben Tabelle auszuwählen (SELECT), in die eingefügt wird. (Das Problem liegt darin, dass das SELECT möglicherweise Datensätze finden würde, die früher während desselben Laufs eingefügt wurden. Wenn man Sub-Select-Klauseln verwendet, könnte die Situation schnell sehr verwirrend werden!)

Hey des geht ja doch. Geil. Dankeschön Zwirni!!!!
 
Zurück
Oben