Zwei Select Statements Left Joinen?

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