Seite 1 von 1

Wenn man mal 'ne Fehlermeldung braucht, kommt keine

Verfasst: So, 24.02.2008 09:17
von heinz_ketchup
Hallo,

ich habe eine Ursprungstabelle ('istdaten_original') mit Buchungssätzen, aus der ich nur bestimmte Informationen benötige. Die für mich wichtigen Infos schreibe ich mit INSERT INTO in eine neue Tabelle ('istdaten'). Gleichzeitig werden die Buchungswerte mit einem Vorzeichen (kto_vorzeichen = +1 oder -1), aus der Steuertabelle 'konten' multipliziert, um die richtige Grundlage für weitere Berechnungen zu erhalten.

Dabei kann folgendes Problem auftreten:

Es gibt Buchungen in der 'istdaten_original' mit Kontonummern, die in meiner Steuertabelle 'konten' noch nicht vorhanden sind. Sobald dieses Problem auftritt, wird der betreffende Datensatz nicht in meine Zieltabelle 'istdaten' übernommen (weil MySQL das Vorzeichen nicht findet). Sprich, ich habe in meiner Ausgangstabelle 4000 Datensätze und in meiner Zieltabelle nur 3992. Sonst bekommt man in MySQL alle naselang eine Fehlermeldung, nur in diesem Fall nicht.

Hier meine INSERT Anweisung:

Code: Alles auswählen

INSERT INTO istdaten (id_ktonr, id_beschreibung, id_wert, id_monat, id_jahr)

SELECT
	istdaten_original.SachkontoNr, 
	istdaten_original.Buchungstext, 
	istdaten_original.Betrag * konten.kto_vorzeichen,
	Month(Buchungsdatum),
	Year(Buchungsdatum)
FROM istdaten_original, konten
	 where istdaten_original.SachkontoNr = konten.kto_nr
Ich habe nun gar keine Ahnung, wie ich eine Information zu den nicht übertragenen Datensätze bekomme. Kann ich mir einen Logfile schreiben lassen? Wenn ja, wie macht man sowas? Leider bin ich noch nicht so fit in MySQL.

Vielen Dank für eure Hilfe!

Schöne Grüße
Werner

Re: Wenn man mal 'ne Fehlermeldung braucht, kommt keine

Verfasst: So, 24.02.2008 11:40
von komma4
Heinz,

lasse Dir eine Liste der 8 Konten ausgeben, die nicht in der Konten-Tabelle sind (in meinem Beispiel heisst Deine Testtabelle anders!):

Code: Alles auswählen

SELECT DISTINCT
 Buchungen.SachkontoNr
FROM Buchungen, Konten
  where Buchungen.SachkontoNr NOT IN ( SELECT kto_nr FROM Konten ) ;

Re: Wenn man mal 'ne Fehlermeldung braucht, kommt keine

Verfasst: So, 24.02.2008 11:43
von Barlee
Hallo Werner,

evtl. könnte Dir ein OUTER JOIN helfen. Einfaches Beispiel:

Code: Alles auswählen

SELECT * FROM 
Sachkonto AS A
LEFT OUTER JOIN Konto AS B
ON
A.sachkonto = B.konto
Folgendes Bild zeigt das Ergebnis:
Bild_4.jpg
Bild_4.jpg (9.27 KiB) 518 mal betrachtet
Alle Informationen aus der "linken" Tabelle bleiben erhalten (in diesem Fall Tabelle Sachkonto). Gibt es keine Entsprechung in der Tabelle Konto, dann werden DB-NULL Werte ausgegeben.
Leere Felder signalisieren Dir also, welche Kontonummern in Deiner Steuertabelle noch nicht vorhanden sind.

Gruß Barlee

Re: Wenn man mal 'ne Fehlermeldung braucht, kommt keine

Verfasst: So, 24.02.2008 14:23
von heinz_ketchup
Hallo Jungs,

na, ihr arbeitet auch am Sonntag? :shock:

Vielen Dank für eure schnelle Hilfe!!!

Beide Vorschläge funktionieren bei mir sehr gut. Die Variante von komma4 ist noch eine kleine Spur praktikabler für mich, als die von Barlee. Bei Barlee's Version steht alles toll nebeneinander. Leider kann so eine Kontenliste schnell 500 bis 600 Einträge haben und dadurch leidet naturgemäß die Übersichtlichkeit.

Nochmals herzlichen Dank für eure Mühe!

Schöne Grüße
Werner

PS: wie bekommt man eigentlich so ein "Gelöst:" vor sein Betreff?