[MySQL] Tabelle zum JOIN anhand eines Wertes auswählen

paddya

Well-known member
ID: 296438
L
4 September 2007
529
61
Guten Tag,

ich habe mal wieder eine Frage an die Experten hier.

Momentan nutze ich für die Angebote eines Marktplatzes zwei Tabellen, da es zwei Arten von "Waren" gibt, die verkauft werden können. Die Waren stehen dabei nichti in einer Tabelle, sondern sind ebenfalls aufgesplittet.
Momentan sieht das also so aus:
Code:
Markplatz für Ware A                                 Marktplatz für Ware B
              | INNER                                                       | INNER
              | JOIN                                                         | JOIN
             \_/                                                             \_/
Tbl. in der W. A hinterlegt ist                      Tbl. in der W. B hinterlegt ist

Nun möchte ich die beiden Marktplatz-Tabellen gerne zusammenführen und in einer zusätzlichen Spalte die Art der Ware angeben um anhand dieser auf die richtige Waren-Tabelle zu joinen.

Die Frage ist, wie ich das mache. Vor allem muss von der Warentabelle nochmal auf eine andere Tabelle gejoint werden. Das ganze könnte also etwas komplexer ausfallen. Bietet MySQL Mittel oder Wege, eine Tabelle nur unter einer bestimmten Bedingung zu joinen?

Mein erster Ansatz war, zunächst einmal beide Warentabellen zu joinen und die richtigen Werte anhand der `type`-Spalte auszuwählen.

Code:
SELECT o.id IF(u.type = 'a', a.name, b.name) AS object_name FROM offers AS o LEFT JOIN ware_a AS a ON o.offer_object = a.id LEFT JOIN ware_b ON o.offer_object = b.id

Allerdings kann ich mir vorstellen, dass das nicht sonderlich performant und elegant ist.

Gibt es bessere Lösungen oder sollte ich besser bei meinen zwei Tabellen bleiben?

Danke schon mal im Vorraus,
paddya

(Ich hoffe, ich habe mich verständlich ausgedrückt :).)
 
Ich hoffe, ich hab das richtige verstanden :)

Ein JOIN ist immer an eine Bedingung geknüpft, nämlich die Bedingung unter welcher zwei Tupel von zwei verschiedenen Tabellen verknüpft werden.

Nehmen wir also an, du hast deine beiden Marktplätze nun in einer Tabelle drin. Nun willst du irgendeine Tabelle mit diesem Marktplatz joinen, aber nur die Waren vom Typ A nehmen. Du hängst beim JOIN einfach die Bedingung dran, dass du eben nur Waren vom Typ A haben willst.

Früher hattes du
Code:
[FONT=Courier New][B][COLOR=#9932cc]SELECT[/COLOR][/B] other.something, market_a.article_id
[B][COLOR=#9932cc]FROM[/COLOR][/B] market_a
[B][COLOR=#9932cc]JOIN[/COLOR][/B] other [B][COLOR=#9932cc]ON[/COLOR][/B] market_a.article_id = other.article_id[/FONT]
Nun legst du beim JOIN schon fest, dass du nur Waren vom Typ A haben willst, also
Code:
[FONT=Courier New][B][COLOR=#9932cc]SELECT[/COLOR][/B] other.something, market.article_id
[B][COLOR=#9932cc]FROM[/COLOR][/B] market
[B][COLOR=#9932cc]JOIN[/COLOR][/B] other [B][COLOR=#9932cc]ON[/COLOR][/B] market.type = 'a' [B][COLOR=#9932cc]AND[/COLOR][/B] market.article_id = other.article_id[/FONT]
 
Edit: Jetzt wirds mir klar... danke theHacker :) Ich will ja gar nicht beides gleichzeitig...

Warum einfach, wenns auch kompliziert geht ;)

Greetz

paddya