Zwei Select Statements Left Joinen?
am 02.03.2007 20:25:04 von nikolai.onken
Hallo,
ich habe folgende Tabellenstruktur
FA_Questions (id)
FA_QuestionOne (FK->FA_Questions_id)
FA_QuestionTwo (FK->FA_Questions_id)
FA_QuestionThree (FK->FA_Questions_id)
FA_Member_has_FA_QuestionOne
FA_Member_has_FA_QuestionTwo
FA_Member_has_FA_QuestionThree
gegeben sind zwei member id's und ich moechte wissen welche
FA_Questions diese zwei member id's gemeinsam haben.
Fuer einen Member bekomme ich es ja mit einem UNION raus:
SELECT * FROM (
SELECT FA_Questions.id FROM FA_Questions
INNER JOIN FA_Member_has_FA_QuestionOne as m1o ON m1o.FA_Member_id = 3
INNER JOIN FA_QuestionOne ON m1o.FA_QuestionOne_id = FA_QuestionOne.id
AND FA_QuestionOne.FA_Questions_id = FA_Questions.id
UNION
SELECT FA_Questions.id FROM FA_Questions
INNER JOIN FA_Member_has_FA_QuestionTwo as m2o ON m2o.FA_Member_id = 3
INNER JOIN FA_QuestionTwo ON m2o.FA_QuestionTwo_id = FA_QuestionTwo.id
AND FA_QuestionTwo.FA_Questions_id = FA_Questions.id
UNION
SELECT FA_Questions.id FROM FA_Questions
INNER JOIN FA_Member_has_FA_QuestionThree as m3o ON m3o.FA_Member_id =
3
INNER JOIN FA_QuestionThree ON m3o.FA_QuestionThree_id =
FA_QuestionThree.id AND FA_QuestionThree.FA_Questions_id =
FA_Questions.id
) as t
aber wie bekomme ich jetzt das zweite Ergebnisset des zweiten Members
in die Query?
Jegliche Hilfe waere super.
Viele Gruesse,
Nikolai
Re: Zwei Select Statements Left Joinen?
am 06.03.2007 10:51:15 von Johannes Vogel
Hi Nikolai
Nikolai Onken wrote:
> ich habe folgende Tabellenstruktur
> FA_Questions (id)
> FA_QuestionOne (FK->FA_Questions_id)
> FA_QuestionTwo (FK->FA_Questions_id)
> FA_QuestionThree (FK->FA_Questions_id)
> FA_Member_has_FA_QuestionOne
> FA_Member_has_FA_QuestionTwo
> FA_Member_has_FA_QuestionThree
Da solltest du über dein Design nachdenken. Das ist IMHO Schrott.
> gegeben sind zwei member id's und ich moechte wissen welche
> FA_Questions diese zwei member id's gemeinsam haben.
> Fuer einen Member bekomme ich es ja mit einem UNION raus:
> SELECT * FROM (
> SELECT FA_Questions.id FROM FA_Questions
> INNER JOIN FA_Member_has_FA_QuestionOne as m1o ON m1o.FA_Member_id = 3
> INNER JOIN FA_QuestionOne ON m1o.FA_QuestionOne_id = FA_QuestionOne.id
> AND FA_QuestionOne.FA_Questions_id = FA_Questions.id
> UNION
> SELECT FA_Questions.id FROM FA_Questions
> INNER JOIN FA_Member_has_FA_QuestionTwo as m2o ON m2o.FA_Member_id = 3
> INNER JOIN FA_QuestionTwo ON m2o.FA_QuestionTwo_id = FA_QuestionTwo.id
> AND FA_QuestionTwo.FA_Questions_id = FA_Questions.id
> UNION
> SELECT FA_Questions.id FROM FA_Questions
> INNER JOIN FA_Member_has_FA_QuestionThree as m3o ON m3o.FA_Member_id =
> 3
> INNER JOIN FA_QuestionThree ON m3o.FA_QuestionThree_id =
> FA_QuestionThree.id AND FA_QuestionThree.FA_Questions_id =
> FA_Questions.id
> ) as t
Wozu das `select * from () as t` rundherum? Wenn du das Design
korrigiert hast, wird sich dieses übertriebene Statement auf einen
Dreizeiler kürzen.
Zumindest One/Two/Three kannst du als Attribut nehmen und damit die
ganzen Unions streichen. Weiter mag ich mich damit gar noch nicht
auseinander setzen. Sorry.
> aber wie bekomme ich jetzt das zweite Ergebnisset des zweiten Members
> in die Query?
> Jegliche Hilfe waere super.
> Viele Gruesse,
Tja, das ist nicht die Hilfe, die du suchst. Aber es ist die beste
Hilfe, die man dir geben kann.
HTH, Johannes