Join und Like %

elcomportal

Neuer Benutzer
Beiträge
4
Hallo,
ich suche seit ein paar Tagen nach einer Lösung, aber gefunden habe ich noch nichts, deshalb hier meine Frage:

Ich habe 2 Tabellen Halter und Hunde. Halter hat die Spalten Name, Vorname, Kundennummer Hunde hat die Spalten Hundename und Kundennummer. So wird dem Kunden über die Kundennummer der Hund zugewiesen. Wenn der Nutzer in ein Suchfeld nun eingibt Meier sollen alle Meiers mit Name, Vorname und entsprechenden Hunden ausgegeben werden. Wenn der 2 Hunde hat zwei Zeilen.
Beispiel:
Meier, Otto, Bonzo
Meier, Otto, Nelly
Meier, Marcus, Hasso

Wenn der Nutzer einen Hundenamen eingibt, sollen alle Halter mit einem Hund mit diesem Namen ausgegeben werden.

Meier, Otto, Nelly
Heine, Gustav, Nelly

Ich kriege die Abfrage einfach nicht hin. Habe alle möglichen Joins probiert, aber das richtige Ergebnis kriege ich nicht hin. Könntet Ihr mir bitte weiterhelfen?
Danke.
 
Werbung:
Ich denke es ist nicht eine Abfrage, sondern 2. Es kommt etwas darauf an, wie Du den Suchparameter in der Abfrage unterbringen willst oder wie Du ihn überhaupt beim User abfragst.
Ist es ein Eingabefeld "Name", dass dann auf Hund und Herrchen sucht? Oder 2 verschiedene Vorgänge?

Die eigentliche Abfrage mit Join über die Kundennummer ist natürlich identisch. Nur die Platzierung der Parameter in der Where Clause eben abhängig von Deinem Ziel.
 
Das ist ein Feld, wo man einen Namen eingibt, egal ob Hund oder Herrchen und egal was man eingibt, sollen die entsprechenden Datensätze ausgegeben werden.
 
nun denn, mal a bissl Grundlagen ...

Code:
edb=*# \d halter
                  Table "public.halter"
    Column    |  Type   | Collation | Nullable | Default
--------------+---------+-----------+----------+---------
 name         | text    |           |          |
 vorname      | text    |           |          |
 kundennummer | integer |           | not null |
Indexes:
    "halter_pkey" PRIMARY KEY, btree (kundennummer)
Referenced by:
    TABLE "hunde" CONSTRAINT "hunde_kundennummer_fkey" FOREIGN KEY (kundennummer) REFERENCES halter(kundennummer)

edb=*# \d hunde
                  Table "public.hunde"
    Column    |  Type   | Collation | Nullable | Default
--------------+---------+-----------+----------+---------
 kundennummer | integer |           |          |
 name         | text    |           |          |
Foreign-key constraints:
    "hunde_kundennummer_fkey" FOREIGN KEY (kundennummer) REFERENCES halter(kundennummer)

edb=*# select * from halter;
 name  | vorname | kundennummer
-------+---------+--------------
 meier | otto    |         4711
 meier | marcus  |         4712
(2 rows)

edb=*# select * from hunde;
 kundennummer | name  
--------------+-------
         4711 | bonzo
         4711 | nelly
         4712 | hasso
(3 rows)

edb=*# with alle_hunde as (select h1.name, h1.vorname, h2.name from halter h1 left join hunde h2 on h1.kundennummer=h2.kundennummer) select * from alle_hunde;
 name  | vorname | name  
-------+---------+-------
 meier | otto    | bonzo
 meier | otto    | nelly
 meier | marcus  | hasso
(3 rows)

edb=*# with alle_hunde as (select h1.name, h1.vorname, h2.name as hund from halter h1 left join hunde h2 on h1.kundennummer=h2.kundennummer) select * from alle_hunde where name = 'meier';
 name  | vorname | hund  
-------+---------+-------
 meier | otto    | bonzo
 meier | otto    | nelly
 meier | marcus  | hasso
(3 rows)

edb=*# with alle_hunde as (select h1.name, h1.vorname, h2.name as hund from halter h1 left join hunde h2 on h1.kundennummer=h2.kundennummer) select * from alle_hunde where name = 'meier' and vorname = 'otto';
 name  | vorname | hund  
-------+---------+-------
 meier | otto    | bonzo
 meier | otto    | nelly
(2 rows)

edb=*# with alle_hunde as (select h1.name, h1.vorname, h2.name as hund from halter h1 left join hunde h2 on h1.kundennummer=h2.kundennummer) select * from alle_hunde where hund = 'nelly';
 name  | vorname | hund  
-------+---------+-------
 meier | otto    | nelly
(1 row)

select BIER;
 
Werbung:
Oh, vielen Dank. Das werde ich mal durcharbeiten, will das ja nicht nur erstellen, sondern auch dazu lernen. Danke für den Input!
 
Zurück
Oben