SQL-String-Suche

Bongo

Benutzer
Beiträge
8
Hallo zusammen,

ich versuche mich bereits den ganzen Tag an einem Select, den ich nicht so wirklich auf die Reihe kriege.

Habe die folgenden zwei Tabellen:

BUCHUNGEN
****************
Field | Type
-------------+---------------------
ID | int(11)
BUCHTAG | date
BUCHZEIT | time
SOLL | smallint(5) unsigned
HABEN | smallint(5) unsigned
BETRAG | float(7,2)


KTO_PLAN
*************
Field | Type
---------+---------------------
KTONR | smallint(5) unsigned
LABEL | varchar(30)
AKTIV | tinyint(1)
KATID | tinyint(3) unsigned


BUCHUNGEN.SOLL und BUCHUNGEN.HABEN sind Fremdschlüssel von KTO_PLAN.KTONR.
Statt der folgenden Ausgabe:

(SELECT SOLL, HABEN, BETRAG FROM BUCHUNGEN; )

SOLL | HABEN | BETRAG
------+-----------+-------
1000 | 1003 | 77.90
1005 | 1003 | 20.00

möchte ich die Kontenbezeichnungen (statt der Nummern) ausgeben:

(SELECT KTS1.LABEL 'SOLL', KTO_PLAN.LABEL 'HABEN', BETRAG
FROM BUCHUNGEN, KTS1, KTO_PLAN
WHERE SOLL=KTS1.KTONR AND HABEN=KTO_PLAN.KTONR; )

SOLL | HABEN | BETRAG
-------------------------+---------+-----------
Einkauf: Lebensmittel | Bank | 77.90
Tanken | Bank | 20.00

Ich habe mir hier eine View (KTS1) zur Hilfe erstellt, die lediglich alle Kontonummern und ihre
Bezeichnungen aus KTO_PLAN selektiert, weil ein Join wie "WHERE SOLL=KTO_PLAN.KTONR AND HABEN=KTO_PLAN.KTONR",
nicht so einfach funktioniert und meine Sub-Select-Versuche auch alle zu falschen Ergebnissen führten.
Da mir das nicht wirklich so gefällt, frage ich mich (bzw. Euch), ob man nicht zwei Attribute der einen
Tabelle (SOLL und HABEN aus BUCHUNGEN), über ein Attribut der anderen Tabelle (KTONR aus KTO_PLAN) abbilden kann?


Ich danke Euch für's Reinschauen

Gruß
Kai
 
Werbung:
Habe die folgenden zwei Tabellen:

BUCHUNGEN
****************
Field | Type
-------------+---------------------
ID | int(11)
BUCHTAG | date
BUCHZEIT | time
So weit, so schlecht. Es gibt timestamp. Warum zertrümmerst Du die Beziehung zwischen Datum und Zeit?

BUCHUNGEN.SOLL und BUCHUNGEN.HABEN sind Fremdschlüssel von KTO_PLAN.KTONR.
Statt der folgenden Ausgabe:

(SELECT SOLL, HABEN, BETRAG FROM BUCHUNGEN; )

SOLL | HABEN | BETRAG
------+-----------+-------
1000 | 1003 | 77.90
1005 | 1003 | 20.00

möchte ich die Kontenbezeichnungen (statt der Nummern) ausgeben:

Dazu brauchst Du 2 Joins. Stell Deine Abfrage auf expliziete Joins um und gib jedem seinen Alias. Du bist nicht allzu weit weg von der Lösung, deswegen sag ich jetzt nicht mehr. Du schaffst das.
 
Hallo und vielen Dank für Deine Hilfe.

Das mit dem zerfetzten Timestamp war nur so ein Test. Wollte nur mal überprüfen, ob das Ergebnis der Funktion now(), je nach Feld-Datentyp maskiert wird.

Habe deinen Rat jetzt so in die Tat umgesetzt:

select buchtag, buchzeit, a.label, b.label, betrag from buchungen inner join kto_plan a on (a.ktonr=soll) inner join kto_plan b on (b.ktonr=haben);

Ist das so OK?


Gruß
Kai
 
Werbung:
Die Angabe von SOLL und HABEN als Spaltenname für Konto und Gegenkonto ist hier auch etwas verwirrend. Soll/Haben ist ja normalerweise die Angabe Negativ/Positiv auf Konto, Gegenkonto ist dann quasi die Gegenbuchung.
 
Zurück
Oben