MySQL中的FULL OUTER JOIN语法问题(左联合右)

时间:2013-01-25 17:14:43

标签: mysql sql syntax-error union full-outer-join

我正在尝试在MySQL中进行全面的连接,因为我们都知道它们的语法是不可能的。所以,就像我正在使用的任何普通修补器一样:

(T1 LEFT OUTER JOIN T2)UNION(T1 RIGHT OUTER JOIN 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)

同样,左右两个连接单独工作,但如果与UNION运算符放在一起,似乎会产生语法错误。有任何想法吗?是否存在名称冲突?或者在这种情况下是不可能的全部加入?

非常感谢任何反馈!另外,请原谅问题的微不足道(如果它是微不足道的)。

编辑:

"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"

1 个答案:

答案 0 :(得分: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)
相关问题