| Autor |
Beitrag |
NoEon
      
Beiträge: 138
win9x, win 2000, win xp, linux 8.0
|
Verfasst: Fr 19.08.05 09:27
Hallo
ich hab da n Problem, und zwar will mein SQL Statement nicht merh so richtig.
Ich habe es getestet, lief wunderbar.. dann 2 Wochen später lief es nicht mehr. stehe vor einen Rätsel. Ich benutze Firebird 1.5 und die ZEOS Componenten. Meine Abfrage ist eigentlich simple. Ich vergleiche den Wert Artikelnummer in den Stammdaten mit der Artikelnummer einer neuen Lieferanten Preisliste. Ist diese Gleich der LieferantenArtikelnummer, so wird das Feld Preis in den Stammdaten mit dem Feld PreisEK aus der Lieferanten Preisliste ersetzt.
Dss ist n dummer 2 Zeiler. *arghh* ich koche  Wer vermag zu helfen und mir sagen was es mit er Fehlermeldung
| Zitat: | | "multiple rows in singleton selction" |
auf sich hat!?
Viele Grüße
Quelltext 1: 2: 3: 4:
| update tbl_stamm1 S set S.Listenpreis = (Select P.Listenpreis FROM tbl_preise1 P WHERE P.LARTNR = S.LARTIKELNR) WHERE (Select P.Listenpreis FROM tbl_preise1 P WHERE P.LARTNR = S.LARTIKELNR) is not null; |
Moderiert von Tino: Beirag formatiert... war ja kaum zu lesen.
|
|
noidic
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: Fr 19.08.05 09:36
Dein subselect liefert mehr als einen Datensatz zurück, damit kommt is not null nicht klar.
Versuchs mal mit .. where not exists( select.... )
_________________ Bravery calls my name in the sound of the wind in the night...
|
|
NoEon 
      
Beiträge: 138
win9x, win 2000, win xp, linux 8.0
|
Verfasst: Fr 19.08.05 09:49
hey,
also es gibt keien Fehlermeldung, aber mein Feld wird nicht mehr geupdatet!
ich kann es gerade auch noch nicht anachvollziehen...
gruss
lars
|
|
noidic
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: Fr 19.08.05 10:14
Zu schnell geguckt, beim set hast du ja das selbe subselect, das funzt so nicht. Da muss ein Select hin, welches definitiv nur einen Datensatz zurückliefert.
_________________ Bravery calls my name in the sound of the wind in the night...
|
|
NoEon 
      
Beiträge: 138
win9x, win 2000, win xp, linux 8.0
|
Verfasst: Fr 19.08.05 10:24
hi
Quelltext 1: 2: 3: 4:
| update tbl_stamm1 S set S.Listenpreis = (Select P.Listenpreis FROM tbl_preise1 P WHERE P.LARTNR = S.LARTIKELNR) WHERE not exists(Select P.Listenpreis FROM tbl_preise1 P WHERE P.LARTNR = S.LARTIKELNR); |
also im klartext heisst ja diese SQL anweisung (aus meiner Sicht, meinem Verständniss)
update Tabelle "tbl_stamm1
und ich suche mir im ersten select raus wo LARTNR aus aus tbl_preise1 = LARTIKELNR aus tbl_stamm1.
soweit richtig!?
Also ziel ist es zu verglichen. Hat tbl_stamm1 die Artikelnummer aus tbl_preise1, so ersetzte mir im Feld Listenpreis der Tabelle tbl_stamm1, den Wert durch den Wert des Feldes Listenpreis in der Tabelle tbl_preis1.
das komsiches.... es hat so funktiniert.
kannst Du mir das erklären wie das Select richtig sein muss?
Gruss
Lars
|
|
noidic
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: Fr 19.08.05 10:39
Versuchs mal mit:
Delphi-Quelltext 1: 2: 3: 4:
| update tbl_stamm1 S set S.Listenpreis = (Select P.Listenpreis FROM tbl_preise1 P WHERE P.LARTNR = S.LARTIKELNR) WHERE S.LARTIKELNR in ( Select LARTNR from tbl_preise1 ); |
Du musst dabei aber sicherstellen, dass pro LARTNR in tbl_preise1 nur ein Datensatz vorhanden ist, ansonsten gehts daneben.
_________________ Bravery calls my name in the sound of the wind in the night...
|
|
NoEon 
      
Beiträge: 138
win9x, win 2000, win xp, linux 8.0
|
Verfasst: Fr 19.08.05 11:06
ok das DIng funzt jetzt wieder....
ich hab dann in Excel die Daten kurz durchgefiltert und doppelte rausgefiltert!
Hmm genial wäre die Lösung wenn ich das nicht machen müsste...
wenn Du da ne Idee hast dann wäre ich Dir sehr verbunden...
Hast DU n interessanten Buchvorschlag für mich!?
Gruss
Lars
|
|
noidic
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: Fr 19.08.05 11:11
Wenn es sich um tatsächliche Dubletten handelt, wenn also bei doppelten Datensätzen auch die Preise gleich sind, kannst du es wie folgt machen:
Delphi-Quelltext 1: 2: 3: 4:
| update tbl_stamm1 S set S.Listenpreis = (Select max(P.Listenpreis) FROM tbl_preise1 P WHERE P.LARTNR = S.LARTIKELNR group by P.LARTNR ) WHERE S.LARTIKELNR in ( Select LARTNR from tbl_preise1 ); |
Buchempfehlung hab ich leider keine für dich, hab mir mein SQL-Wissen hauptsächlich aus dem Internet ( Oracle-Doku ) und den Codes anderer Entwickler der Firmen, in denen ich arbeitete geholt. Und durch ausdauerndes ausprobieren 
_________________ Bravery calls my name in the sound of the wind in the night...
|
|
NoEon 
      
Beiträge: 138
win9x, win 2000, win xp, linux 8.0
|
Verfasst: Fr 19.08.05 11:23
SUPER
genau das ist der Fall....
gleiches habe ich auch mit RABTT und Listen Rabatt, immer das Feld der Artikelnummer im Auge...
Super... ich bin erst ca. 3 Monate vertieft mit SQL unter Firebird beschäftigt und schon so manche Träne vergossen. Vor allem weil ich ein größeres Projekt gerade bearbeite wo die intelligens in der Datenbank drinne steckt... schnief!
besten Dank!
Lars
|
|