Join-Chaos

Noeden

Erfahrenes Mitglied
Hallo,

ich habe in einem anderen Thema schon mein Problem genannt mit der ID über mehrere Tabellen hinaus. Jetzt will ich die Tabellen zusammenführen und es ist ein einziges Chaos.

Vielleicht könntet ihr meine Gedanken ein wenig sortieren, das ist das erste mal, dass ich mit JOINS arbeite.

Nochmal meine Ausgangslage:
Ich habe 4 Tabellen. In diesen Tabellen gibt es jeweils eine Spalte `ID`als Primärschlüssel. (Wenn Primärschlüssel schon falsch ist bitte ich um Aufklärung. Index ist doch zum indizieren für die Performance und Unique, wenn der gleiche Wert nur einmal vorkommen darf oder?)

In diesen 4 Tabellen gibt es aber keine ID 2 mal. Ergo: Wenn in Tabelle 3 eine ID 1 vorhanden ist, gibt es auf keinen Fall in den anderen drei Tabellen eine ID 1.

In der 5.Tabelle kommen diese IDs beliebig oft vor um ihnen Daten zuzuweisen. Jetzt hätte ich gerne die 4 Tabellen in die 5. einsortiert. Bei den 4 Tabellen sind aber nur jeweils 3 Spalten gleich.

Ein Beispiel:

Code:
Säugetiere
ID Beine Mägen
1	2		1
6	5		0


Fische
ID Flossen
3	3
5	7

Vögel
ID	Flügel
2	1
4	10


Aufenthaltsort
ID	Ort	Zeit
1	A	1uhr
1	B	2uhr
1	A	18uhr
3	C	1uhr
4	U	7uhr
5	P	11uhr
6	W	1uhr


Und ich möchte haben (ja das Beispiel ist unsinnig)
ID	Beine	Mägen Flossen	Ort	Zeit
1	2		1		-		A	1uhr
1	2		1		-		B	2uhr
1	2		1		-		A	18uhr
3	-		-		3		C	1uhr

Ist das überhaupt möglich?
Ich wollte die 4 Tabellen erstmal ohne die 5. verbinden (Hier also Vögel, Säugetiere und Fische).
Mit folgender Abfrage war ich ganz zuversichtlich:

SELECT * FROM `fische`,`vögel`, `säugetiere`

Das Ergebnis war ernüchternd :-D Ich hatte nur einen Fisch gespeichert. Und dieser hat dann in die Spalten, die er mit den beiden anderen gemeinsam hatte, einfach seine werte reinkopiert. Ich hatte nur einen Fisch und der hatte den Namen 'Tom'. Alle Vögel und alle Säugetiere hießen in der Ergebnistabelle dann auch Tom. Komisch. (Die Spalte Name habe ich in dem Beispiel weggelassen. Alle Tabellen außer der mit den Aufenthaltsorten haben eine solche Spalte, die soll auch ins Ergebnis)

Ich hoffe ihr versteht mein Problem, ich selber verstehe nichts mehr ;)

DANKE.

PS: Eine Seite mit Aufklärung würde mir als Hilfe hoffentlich reichen, aber ich finde immer nur das gleiche und meines Erachtens funktioniert das bei mir nicht (was ja nicht sein kann) :-D Also liegt es an mir.

DANKE
 
Dein Problem ist, dass du keine Join Bedingung angegeben hast. Das Ergebnis ist dann das Kreuzprodukt der drei Tabellen, also alle Möglichen Kombinationen der Spalten.

Um die Tabellen einfach nur aneinander zu hängen gibt es UNION.

SQL:
SELECT ID AS ID, Beine AS Beine, Mägen AS Mägen, NULL AS Flossen, NULL AS Flügel
FROM Säugetiere
UNION
SELECT ID, NULL, NULL, Flossen, NULL
FROM Fische
UNION
SELECT ID, NULL, NULL, NULL, Flügel
FROM Vögel

Jetzt hast du schon mal alles in einem. Fehlt noch der Join. Dafür geben wir der Abfrage von eben einen Alias, um das Ergebnis dann mit der anderen Tabelle zu Verbinden.

SQL:
SELECT ID, Beine, Mägen, Flossen, Flügel, Ort, Zeit
FROM
(
	SELECT ID AS ID, Beine AS Beine, Mägen AS Mägen, NULL AS Flossen, NULL AS Flügel
	FROM Säugetiere
	UNION
	SELECT ID, NULL, NULL, Flossen, NULL
	FROM Fische
	UNION
	SELECT ID, NULL, NULL, NULL, Flügel
	FROM Vögel
)
AS zusammen
JOIN (andere_tabelle) ON (zusammen.ID = andere_tabelle.ID)

Ist ungetestet, aber sollte dir die Idee vermitteln.
 
Hi,

riesen Dank schonmal, hast das eigentlich echt mega geil erklärt. Aber ich bin immernoch zu dösig.

Und dein Code muss ja gar nicht funktionieren, das war ja eh nur ein Beispiel von mir. Umsetzen muss und möchte ich das schon selber.

Wenn ich jetzt bei phpmyadmin folgendes eingebe (bei mir konkret)



Dann kommt die richtige Tabelle. Sobald ich aber die Klammern darumsetze und 'AS zusammen' dahinterschreibe oder geschweige denn das mit der anderen Tabelle joinen will zeigt er mir nichts an. Ich bekomem aber irgendwie auch keine Fehlermeldung oder ein "leeres Resultat" zurück. Ich begebe mich mal auf die Suche.

PS: Vielleicht sieht ja jemand einen Fehler, das wäre meine ganze Abfrage. php gibt mir den darauf folgenden Fehler aus. Also sollte ja etwas mit der Abfrage nicht stimmen. Muss gleich mal eine Pause machen :D

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in

--- War ein anderer Fehler -.- Tut mir Leid. Warum phpmyadmin so spinnt wüsste ich auch gerne. die Warnung entsteht aber parallel und es funktioniert. wie ich die Eliminiere ist ein anderes Thema ;)
DANKE
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück