SQL (mal wieder) Abfrage mit NULL

norbert_pdm

Cadet 2nd Year
Registriert
März 2021
Beiträge
25
Hallo, hallo und guten Morgen in die Runde....
Ich habe folgende zwei Tabellen..

Tabelle kind
kind_IDma_IDco_IDkind_namekind_vorname
112fleißigcharlotte
223fröhlichlisa
31NULLfreundlichmaria

ma_ID und co_ID sind Fremdschlüssel auf Tabelle ma und dort auf ma_ID

Tabelle ma
ma_IDma_namema_vorname
1müllermax
2lindemannerwin
3meyeremil

Nun versuche ich schon seit einer Weile mit allen möglichen Konstrukten Tabelle kind und Tablle ma so abzufragen, dass er mir folgendes ausgibt:

Wenn ma_ID = 1 dann folgende Tabelle
kind_IDkind_name, kind_vornamema_name, ma_vornameco_name, co_vorname
1fleißig, charlottemüller, maxlindemann, erwin
3freundlich, mariamüller, max-

Ich hab das Gefühl, dass ich mir mit dem Konstrukt so ins Bein geschossen habe... ;-)

Hat vielleicht von euch jemand noch ein Schlagwort oder eventuell sogar ein Tipp?
Wenn ich es 'normal' versuche erhalte ich nicht das von mir gewünscht.
Zwei Beispielabfragen, die ich probiert habe:
SQL:
SELECT
    CONCAT(kind.tbl_kinder_name, ', ', kind.tbl_kinder_vorname) AS Klient,
    CONCAT (ma.tbl_ma_name, ', ', ma.tbl_ma_vorname) AS CO_Mitarbeiter
FROM
    tbl_kinder kind
    LEFT JOIN tbl_mitarbeiter ma ON ma.tbl_mitarbeiter_ID = kind.tbl_co_ID
WHERE
    ma.tbl_mitarbeiter_ID = '4'
    AND kind.tbl_co_ID IS NOT NULL
Diese Abfrage liefert mir ein leeres Ergebnis.

Und diese:
SQL:
SELECT
    CONCAT(kind.tbl_kinder_name, ', ', kind.tbl_kinder_vorname) AS Klient,
    kind.tbl_co_ID
FROM
    tbl_kinder AS kind
WHERE
    kind.tbl_co_ID NOT IN
        (
            SELECT
                ma.tbl_mitarbeiter_ID
            FROM
                tbl_mitarbeiter AS ma
            WHERE
                kind.tbl_co_ID IS NOT NULL
                AND ma.tbl_mitarbeiter_ID = '4'
        )
liefert mir einfach zu viel...

Ich bin im Augenblick für jeden Tipp dankbar :-)
VG, Norbert
 
Wo ist das Problem? Einfach nen OUTER JOIN nutzen.
Du solltest vielleicht weniger "probieren" sondern dich einfach Mal mit den Basics beschäftigen, sonst verstehst du ja nie warum etwas diese oder jene Ausgabe liefert
 
norbert_pdm schrieb:
SQL:
SELECT
    CONCAT(kind.tbl_kinder_name, ', ', kind.tbl_kinder_vorname) AS Klient,
    CONCAT (ma.tbl_ma_name, ', ', ma.tbl_ma_vorname) AS CO_Mitarbeiter
FROM
    tbl_kinder kind
    LEFT JOIN tbl_mitarbeiter ma ON ma.tbl_mitarbeiter_ID = kind.tbl_co_ID
WHERE
    ma.tbl_mitarbeiter_ID = '4'
    AND kind.tbl_co_ID IS NOT NULL
Diese Abfrage liefert mir ein leeres Ergebnis.
Mehrere Probleme:
  • Laut deiner Strukturdefinition gibt es weder die Spalte "tbl_mitarbeiter_ID" in der Tabelle "ma", noch gäbe es dort einen record mit der "ma_ID" 4 falls du diese hättest auswählen wollen
  • Für die Spalte co_name / co_vorname brauchst du einen weiteren JOIN auf die Tabelle "ma"
  • Wieso heißt "Kind" dann auf einmal "Klient"?

Nachdem die Tabellen- und Spaltennamen alle komplett durcheinander sind kann ich keine konkrete Empfehlung abgeben, mit den NULL values hat es zunächst nichts zu tun.
 
  • Gefällt mir
Reaktionen: abcddcba
rg88 schrieb:
Wo ist das Problem? Einfach nen OUTER JOIN nutzen.
Du solltest vielleicht weniger "probieren" sondern dich einfach Mal mit den Basics beschäftigen, sonst verstehst du ja nie warum etwas diese oder jene Ausgabe liefert
Ich muss zugeben, dass ich die ganz JOIN Geschichte extrem kompliziert finde... :rolleyes::rolleyes:
Aber nach dem ich jetzt wusste, nach was ich suchen muss, klappt es.
Danke dir...

Ich wusste nicht, dass die Reihenfolge IM LEFT JOIN eine Rolle spielt... Ich hab die beiden Tabellen getaucht und nun geht's! :-)
Ergänzung ()

floq0r schrieb:
Mehrere Probleme:
  • Laut deiner Strukturdefinition gibt es weder die Spalte "tbl_mitarbeiter_ID" in der Tabelle "ma", noch gäbe es dort einen record mit der "ma_ID" 4 falls du diese hättest auswählen wollen
  • Für die Spalte co_name / co_vorname brauchst du einen weiteren JOIN auf die Tabelle "ma"
  • Wieso heißt "Kind" dann auf einmal "Klient"?

Nachdem die Tabellen- und Spaltennamen alle komplett durcheinander sind kann ich keine konkrete Empfehlung abgeben, mit den NULL values hat es zunächst nichts zu tun.
Du hast recht. Ich hätte mir die Mühe machen sollen, mein Ist auf das runtergebrochene Beispiel noch zu 'übersetzen'...
Ich werd beim nächsten mal genauer drauf achten... :-)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: Flo1617, rg88 und floq0r
select
k1.kind_id,
k1.Kind,
k1.MA_Mitarbeiter,
concat(m.ma_name,", ", m.ma_vorname) CO_Mitarbeiter
from (
select
k.kind_id,
k.co_id,
concat(k.kind_name,", ", k.kind_vorname) Kind,
concat(ma.ma_name,", ", ma.ma_vorname) MA_Mitarbeiter
from
kind k
join ma ma on k.ma_id = ma.ma_id
Where
k.ma_id = 1) k1
left join ma m on k1.co_id = m.ma_id

Das wäre z.B. eine Möglichkeit wenn man nur die Leute mit ma_id = 1 haben möchte. ;) Wenn man alles haben möchte, natürlich ohne die "Where"-Klausel.

Hast anscheinend ja aber selber jetzt herausgefunden wie das mit den Outer Joins läuft. :) Am Anfang dauert es auch ein bisschen bis man das verinnerlicht hat mit den Joins, etc. :D
 
Zurück
Oben