Mehrere boolsche Bedingungen setzen bei einem Join?

Kampfgummibaerlie

Datenbank-Guru
Beiträge
728
Also, mein Wollen wäre zu folgendem Zweck:
Ich join mit einer 2. Tabelle, und möchte aber nicht nur 1 Column inner Joinen, sondern gleich mehrere.

Ich denke, dass es auch hier einfach mittels eines Joins möglich ist, aber ja, ich überblicke es nicht.
Mein Resultat erkläre ich auch noch: Bei mir kommen bei den Spalten Erster Beruf und Zweiter Beruf die gleichen Berufe raus.

Mein Code sähe so aus:
Code:
select charaktere.name as name, charaktere.level as level, charaktere.q_gegenstandsstufe as 
gegenstandsstufe, realms.name as realm, fraktionen.name as fraktion, accounts.name as
account, berufe.name as "Erster Beruf", berufe.name as "Zweiter Beruf" from charaktere 
inner join realms on (charaktere.realm = realms.id) inner join fraktionen on (charaktere.fraktion = fraktionen.id)  inner join
accounts on (accounts.id = charaktere.account) left join 
berufe on (berufe.id = charaktere.beruf1)

Ja, ich weiß, viel Text im Code, aber ja... Ich bastel relativ abwechselnd, je nach Lust und Laune an einer World of Warcraft Homepage/Datenbank, oder eben der für meine Mutter (Für das Nähcafe)

Nachdem ihr ja Quasi Profis mit der Thematik seit, frage ich euch ;)

Anhang:
Wenn sowas nicht möglich ist (ich aber nicht glaube), dann schreibt einfach kurz und schmerzlos "geht nicht"... "bau dir eine Function für einen der 2 Berufe". <<-- wäre jetzt meine (einfachere Lösung), aber ich will ja das Thema umfangreich verstehen :)
 
Werbung:
Code:
test=*# create table tab_a(a int, b int, c int);
CREATE TABLE
test=*# create table tab_b(a int, b int, c int);
CREATE TABLE
test=*# select * from tab_a a inner join tab_b b on ((a.a, a.b, a.c)=(b.a, b.b, b.c));
 a | b | c | a | b | c
---+---+---+---+---+---
(0 Zeilen)

test=*#
 
Werbung:
Sodala, das Ganze mal endlich richtig konstruiert ^^

Hier in meinem Fall die Lösung:
Code:
select charaktere.name, charaktere.level, charaktere.q_gegenstandsstufe, realms.name, fraktionen.name, accounts.name, (select berufe.name from berufe where berufe.id = charaktere.beruf1),
(select berufe.name from berufe where berufe.id = charaktere.beruf2)
from charaktere inner join realms on (charaktere.realm = realms.id) inner join fraktionen on (charaktere.fraktion = fraktionen.id) inner join accounts on (
   select accounts.id = charaktere.account);
 
Zurück
Oben