SQL Join ueber 3 Tabellen

Steapa

Newbie
Registriert
Dez. 2018
Beiträge
4
Hallo,

Ich hab eine Frage zu SQL-Joins.
Ich hab 3 Tabellen aus denen ich Daten abfragen moechte. Hier mal die vereinfachte Struktur:

t_customer
customer_id, customer_name

t_contact
contact_customer(=customer_id in t_customer), contact_email

t_license
license_customer(=customer_id in t_customer), license_active(true/false)

Es kann mehrere Kontakte zu einem Customer geben und es kann mehrere Lizenzen zu einem Customer geben.

Die Abfrage soll mir jetzt einfach eine Liste aller Kontakte und deren Firmennamen (customer_name) fuer die es Lizenzen mit license_active=true gibt.

Mit meinem, beschraenkten SQL-Wissen haette ich die Abfrage so geschrieben:

Code:
SELECT * FROM t_customer AS c, t_contact AS co, t_license AS l WHERE co.contact_customer=c.customer_id AND l.license_customer=c.customer_id

Diese Abfrage gibt mehr aber die Kontakte mehrfach zurueck, wenn sie mehrere Lizenzen haben auf die das Attribut license_active=true zutrifft.
Also muss wohl in irgend einer Form ein JOIN her ... Davon hab ich allerdings so gar keine Ahnung.

Kann da jemand helfen?
 
Hallo,
eine direkte Lösung kann ich dir jetzt nicht geben.
Aber hier ist eine gute erklärte seite für SQL mit Joins
https://de.wikibooks.org/wiki/Einführung_in_SQL:_Mehr_zu_JOIN

Der Zettel mit den ganzen Kinder und Eltern Beispielen liegt auch immer auf meinem Schreibtisch.
Hilft eigentlich immer wenn ich mal mit Joins arbeiten muss.
 
Hi!

Du hast es schon richtig erkannt: Problem ist, dass es zu einem Kunden mehrere Datensätze in der Tabelle t_license geben kann.

Man muss hier gruppieren:

Code:
SELECT co.contact_customer, co.contact_email, c.customer_name
 FROM t_customer AS c, t_contact AS co, t_license AS l
 WHERE co.contact_customer=c.customer_id
   AND l.license_customer=c.customer_id
   AND l.license_active=true
  GROUP BY co.contact_customer, co.contact_email, c.customer_name

Gruß, Lemmy
 
Sowohl das GROUP BY als auch das DISTINCT funktioniert einwandfrei.

Vielen Dank euch! :)

Gruss
 
Zurück
Oben