Wenn man mal 'ne Fehlermeldung braucht, kommt keine

Datenbanklösungen mit AOO/LO

Moderator: Moderatoren

heinz_ketchup
****
Beiträge: 111
Registriert: So, 07.10.2007 16:05
Wohnort: München

Wenn man mal 'ne Fehlermeldung braucht, kommt keine

Beitrag 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
------------------------------------------------------------
LibreOffice 3.5.4.2 auf Mac OS X 10.10.1 und MySQL 5.5
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

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

Beitrag 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 ) ;
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
Barlee
******
Beiträge: 767
Registriert: Sa, 17.12.2005 12:27

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

Beitrag 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) 519 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
heinz_ketchup
****
Beiträge: 111
Registriert: So, 07.10.2007 16:05
Wohnort: München

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

Beitrag 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?
------------------------------------------------------------
LibreOffice 3.5.4.2 auf Mac OS X 10.10.1 und MySQL 5.5
Antworten