0

MySQL で FULL OUTER JOIN を実行しようとしていますが、その構文では不可能であることは誰もが知っています。したがって、私が使用している通常のいじくり回しのように:

(T1 左外部結合 T2) ユニオン (T1 右外部結合 T2)

これがキャッチです!個々の結合 (左と右) はそれぞれ魔法のように機能しますが、一緒にするとエラー (1064: 構文エラー) が発生し、正しい構文について MySQL サーバーのマニュアルを確認するように求められます。

コードは次のとおりです。

(SELECT 
    *
FROM
    result LEFT OUTER JOIN 
    ((SELECT * FROM SQA AS sqa JOIN SA AS sa USING (sa_oid) WHERE sqa.sq_oid = 1)
    AS tmp1) ON tmp1.sa_oid = result.re_as

WHERE
    result.re_p = 1 AND 
    result.re_s = 1 AND
    result.re_q = 1)

UNION

(SELECT 
    *
FROM
    result RIGHT OUTER JOIN 
    ((SELECT * FROM SQA AS sqa JOIN SA AS sa USING (sa_oid) WHERE sqa.sq_oid = 1)
    AS tmp2) ON tmp2.sa_oid = result.re_as

WHERE
    result.re_p = 1 AND 
    result.re_s = 1 AND
    result.re_q = 1)

ここでも、左右の 2 つの結合は個別に機能しますが、UNION 演算子と組み合わせると構文エラーが発生するようです。何か案は?名前の衝突はありますか? または、この場合、FULL OUTER JOIN は不可能ですか?

どんなフィードバックでも大歓迎です!また、質問の些細なことをお許しください(些細な場合)。

編集:

"Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON tmp2.sa_oid = result.re_as

    WHERE
        result.re_p = 1 AND 
        result.re' at line 20"
4

1 に答える 1

1
Try this:

(SELECT 
    *
FROM
    result LEFT OUTER JOIN 
    (SELECT * FROM surveyquestion_answers AS sqa JOIN surveyanswer AS sa USING (sa_oid) WHERE sqa.sq_oid = 1)
    AS tmp1 ON tmp1.sa_oid = result.re_answer

WHERE
    result.re_page = 1 AND 
    result.re_survey = 1 AND
    result.re_question = 1)

UNION

(SELECT 
    *
FROM
    result RIGHT OUTER JOIN 
    (SELECT * FROM surveyquestion_answers AS sqa JOIN surveyanswer AS sa USING (sa_oid) WHERE sqa.sq_oid = 1)
    AS tmp2 ON tmp2.sa_oid = result.re_answer

WHERE
    result.re_page = 1 AND 
    result.re_survey = 1 AND
    result.re_question = 1)
于 2013-01-25T17:15:54.967 に答える