Hallo liebe community. Ich stehe vor einem kleinen Problem mit einer Datenbankabfrage. Ich habe zwei fest vorgegebene Tabellen.
In Tabelle1 stehen alle Väter die Kinder haben mit diesen:
Tabelle1 (nur Väter, die auch Kinder haben)
Kind Vater
NameA NameVA
NameB NameVA
NameC NameVB
NameD NameVC
NameE NameVC
In Tabelle2 stehen alle väter und alle Kinder mit weiteren Daten. Zusätzlich noch Väter, die keine Kinder haben.
Tabelle2 (alle Personen)
Namen Haarfarbe Augenfarbe
NameA 12 1
NameVA 13 5
NameB 11 11
NameVB 12 13
NameC 12 14
NameD 10 11
NameE 4 10
NameVC 8 3
NameVX 11 5
Nun muss ich das ganze so ausgeben, dass jeweils der Vater mit seinen eigenschaften und darunter seine Kinder mit allen eigenschaften aufgelistet werden. Dann der nächste Vater mit seinen Kindern etc.
Soll Ausgabe (alle Väter mit ihren Kindern)
Name Haarfarbe Augenfarbe
NameVA 13 5
-NameA 12 1
-NameB 11 11
NameVB 12 13
-NameC 12 14
NameVC 8 3
-NameD 10 11
-NameE 4 10
NameVX 11 5
-keine Kinder
Kann mir dabei jemand weiterhelfen wo ich da am besten ansetzen kann?
Wäre für jede Hilfe dankbar.
Ankündigung
Einklappen
Keine Ankündigung bisher.
Problem bei Abfrage aus zwei Tabellen
Einklappen
Neue Werbung 2019
Einklappen
X
-
Problem bei Abfrage aus zwei Tabellen
Stichworte: -
-
[OT]
Zitat von webba Beitrag anzeigenIn Tabelle1 stehen alle Väter die Kinder haben mit diesen
[/OT]
-
Ein Gast antworteteWenn Du in meinem SQL die ".._id" Spalten wieder durch die entsprechenden "Namen" Spalten ersetzt, sollte es eigentlich auch funktionieren.
Grüße
Thomas
Einen Kommentar schreiben:
-
Erstmal vielen Dank für die Antworten!
Dass die Tabellen nicht normgerecht sind weiß ich... Und genau da ist ja das Problem.
Vorallem muss die Lösung erfolgen ohne die Tabellen zu ändern.
Auf den ersten Blick dachte ich auch, dass es einfach wäre aber das ist es nicht...
Ich habe an eine Lösung gedacht wie
1. Tabelle2 Namen mit Tabelle1 Kind abgleichen.
Alle, die nicht entsprechen müssen somit Väter sein. (wie packe ich die in einen Array? Es darf keine neue Tabelle angelegt werden.)
2. Für jeden Vater -> Abgleich über Tabelle2 Vater ob der Vater zu den Kindern in Tabelle2 Kind gehört.
Aber irfendwie komme ich nicht weiter.
Einen Kommentar schreiben:
-
Ein Gast antworteteGar nicht so einfach, wie es im ersten Moment aussieht. Dein Tabellenmodell habe ich leicht umgestellt. Es gibt nun eine Tabelle PERSON und KIND_HAT_VATER. Anbei eine mögliche Lösung plus Testdaten. Wobei VaterC keine Kinder hat.
Erklärung
In der Tabelle KIND_HAT_VATER gilt:
kind_id = p_id (aus PERSON) und natürlich auch
vater_id = p_id (aus PERSON).
Code:CREATE TABLE person ( p_id INT NOT NULL, name VARCHAR(50), haarfarbe INT, augenfarbe INT, PRIMARY KEY(p_id) ); CREATE TABLE kind_hat_vater ( kind_id INT NOT NULL, vater_id INT NOT NULL ); INSERT INTO person VALUES ( 1, 'VaterA', 1, 2 ), ( 2, 'VaterB', 2, 4 ), ( 3, 'KindA', 3, 6 ), ( 4, 'KindB', 4, 8 ), ( 5, 'KindC', 5, 4 ), ( 6, 'VaterC', 7, 1 ); INSERT INTO kind_hat_vater VALUES ( 3,1 ), ( 4,1 ), ( 5,2 ); SELECT v1.vater_id * 100 AS sort, p.* FROM person p JOIN ( SELECT DISTINCT vater_id FROM kind_hat_vater ) v1 ON v1.vater_id = p.p_id UNION ALL SELECT v1.vater_id * 100 + v1.kind_id AS sort, p.* FROM person p JOIN ( SELECT vater_id, kind_id FROM kind_hat_vater ) v1 ON v1.kind_id = p.p_id UNION ALL SELECT p.p_id * 100 AS sort, p.* FROM person p WHERE p.p_id NOT IN ( SELECT vater_id FROM kind_hat_vater ) AND p.p_id NOT IN ( SELECT kind_id FROM kind_hat_vater ) ORDER BY 1; +------+------+--------+-----------+------------+ | sort | p_id | name | haarfarbe | augenfarbe | +------+------+--------+-----------+------------+ | 100 | 1 | VaterA | 1 | 2 | | 103 | 3 | KindA | 3 | 6 | | 104 | 4 | KindB | 4 | 8 | | 200 | 2 | VaterB | 2 | 4 | | 205 | 5 | KindC | 5 | 4 | | 600 | 6 | VaterC | 7 | 1 | +------+------+--------+-----------+------------+ 6 rows in set (0.39 sec) mysql>
Achtung:
Der Trick mit der Spalte "SORT" geht dann daneben, wenn ein Vater mehr als 99 Kinder hat.
Grüße
Thomas
Einen Kommentar schreiben:
-
Ich habe zwei fest vorgegebene Tabellen.
so auf die schnelle:
eine eigene tabelle mit allen vorhandenen vätern
id, name_von_Vater, haarfarbe_id, augenfarbe_id, id_von_kind(falls vorhanden)
eine für die kinder
id_ name_vom_kind, haarfarbe_id, augenfarbe_id
eine für die haarfarbe
id_ haarfarbe
usw.
und danach kannst dua uch ganz easy das sql query erstellen
Einen Kommentar schreiben:
Einen Kommentar schreiben: