Abfrage aus mehreren Tabellen 2 Spalten Bezug auf eine Spalte
Hi,
ich will n paar DBs machen, hab aber schon in den Grundlagen Probleme.
Und zwar eine Tabelle "DVDs" (id, title, genre_1_id, genre_2_id) und eine Tabelle "Genres" (id, genre_name).
Nun will ich ne Abfrage machen, das es mir den Titel der DVD aus Tabelle_DVDs anzeigt und dazu 2 Spalten wo das 1. und das 2. Genre drin steht.
Wie mach ich das am Besten?
thx euch
ich will n paar DBs machen, hab aber schon in den Grundlagen Probleme.
Und zwar eine Tabelle "DVDs" (id, title, genre_1_id, genre_2_id) und eine Tabelle "Genres" (id, genre_name).
Nun will ich ne Abfrage machen, das es mir den Titel der DVD aus Tabelle_DVDs anzeigt und dazu 2 Spalten wo das 1. und das 2. Genre drin steht.
Wie mach ich das am Besten?
thx euch
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 49764
Url: https://administrator.de/forum/abfrage-aus-mehreren-tabellen-2-spalten-bezug-auf-eine-spalte-49764.html
Ausgedruckt am: 05.04.2025 um 04:04 Uhr
29 Kommentare
Neuester Kommentar
Naja, das erste Problem wird wohl sein das mit deinen Infos recht wenig anzufangen ist ;)
Welche Datenbank (MySQL, M$SQL, Oracle .......) ?
Welche Programmiersprache (PHP, JAVA, ASP, .NET ......) ?
Vorher könnte man nur die Glaskugel befragen, aber bei dem Wetter schauts da auch ganz trüb aus ;)
Moin moin, Conny
Welche Datenbank (MySQL, M$SQL, Oracle .......) ?
Welche Programmiersprache (PHP, JAVA, ASP, .NET ......) ?
Vorher könnte man nur die Glaskugel befragen, aber bei dem Wetter schauts da auch ganz trüb aus ;)
Moin moin, Conny
Sofern dein Problem darin liegt, überhaupt einen entsprechenden SQL zu formulieren könnte dir schon geholfen werden (unabhängig von den Punkten die PCDConny genannt hat).
Das was du da gerade nennt man Join, bei deinem Problem würde ich einen "Left Outer Join" verwenden
Das was du da gerade nennt man Join, bei deinem Problem würde ich einen "Left Outer Join" verwenden
SELECT * FROM DVDs LEFT OUTER JOIN Genres ON (DVDs.genre_1_id = Genres.id OR DVDs.genre_2_id = Genres.id);
ich weiss das ich bei euch hier falsch bin aber ich brauche umbedingt hilfe und weiss nicht an wen ich mich wenden sollte...
brauche umbedingt irgendein programm was alle 10 sekunden áuf dem internet explorer´eine bestimmte seit aktualisiert....
Hillllffffffeeeee
[Edit Biber]
ich weiss das ich bei euch hier falsch bin aber ich...
..aber ich kann ganz gut damit leben?habe keine ahnung von computern....sorry
Nein, das ist kein Computerproblem... das ist viel grundsätzlicher.Wenn ich nochmal über so ein Posting stolpere, lass ich es Dich aufessen.
[/Edit]
Na ja, nichts gegen LEFT JOINs,
aber in diesem Fall scheint mir ein UNION zielführender...
HTH
Biber
aber in diesem Fall scheint mir ein UNION zielführender...
Select DVDs.id, Dvds.title, "1" as Genre_id, Genres.genre_name from DVDs, Genres
where DVDs.id = genre_1_id
union
Select DVDs.id, Dvds.title, "2" as Genre_id, Genres.genre_name from DVDs, Genres
where DVDs.id = genre_2_id
HTH
Biber
Prinzipiell würde ich auch zu einem Union tendieren, aber dabei (wie du schon sagtest) werden alle Sätze rausgefilter wo das entsprechende ID Feld nicht gefüllt ist. Was damit natürlich auch dazu führt, dass bestimmte DVD's einfach nicht mehr gefunden werden.
Wenn das Ergebniss eher den Charakter eines SUchergebniss trägt, dann natürlich ganz klar den Union. Wenn aber das Ergebnis eine Übersicht (innerhalb eines Adminbereichs z.B.) genutzt werden sollte, den doch lieber den Outer Join da man dann auch die unvollständig/ fehlerhaft gepflegten Datensätze angezeigt bekommt.
Ein riesen Unterschied von der Performanceunterschied, sofern man davon bei MySQL überhaupt von Performace sprechen kann (vor allem wenn diese bei einem Webhostingserver liegen),sollte es eigentlich nicht geben. Zumindestens meine Test in diesem Bereich (gefühlte Ergebnisse
) bringen zumindest keine riesigen Unterschiede hervor....
Gruss, Maik
Wenn das Ergebniss eher den Charakter eines SUchergebniss trägt, dann natürlich ganz klar den Union. Wenn aber das Ergebnis eine Übersicht (innerhalb eines Adminbereichs z.B.) genutzt werden sollte, den doch lieber den Outer Join da man dann auch die unvollständig/ fehlerhaft gepflegten Datensätze angezeigt bekommt.
Ein riesen Unterschied von der Performanceunterschied, sofern man davon bei MySQL überhaupt von Performace sprechen kann (vor allem wenn diese bei einem Webhostingserver liegen),sollte es eigentlich nicht geben. Zumindestens meine Test in diesem Bereich (gefühlte Ergebnisse
Gruss, Maik
@Boy1980HH
FULL ACK.
Es kommt natürlich darauf an, was eigentlich das Ziel der Abfrage sein soll.
Wenn eine "Liste aller DVDs" das Ziel ist ---> klar, dann LEFT OUTER JOIN.
Egal, ob ein "Genre" eingegeben ist oder nicht.
Wenn das Ziel eine nach Genre sortierte Liste/Auswertung ist, dann würde in der Regel nicht gewollt/erwartet werden, dass diese Liste mit Datensätzen mit einem <NULL>-Genre beginnt. Dann also UNION.
Gruß
Biber
FULL ACK.
Es kommt natürlich darauf an, was eigentlich das Ziel der Abfrage sein soll.
Wenn eine "Liste aller DVDs" das Ziel ist ---> klar, dann LEFT OUTER JOIN.
Egal, ob ein "Genre" eingegeben ist oder nicht.
Wenn das Ziel eine nach Genre sortierte Liste/Auswertung ist, dann würde in der Regel nicht gewollt/erwartet werden, dass diese Liste mit Datensätzen mit einem <NULL>-Genre beginnt. Dann also UNION.
Gruß
Biber