【问题标题】:FULL OUTER JOIN syntax issue in MySQL (left union right)MySQL 中的 FULL OUTER JOIN 语法问题(左联合右)
【发布时间】:2013-01-09 17:16:16
【问题描述】:

我正在尝试在 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)

同样,两个左连接和右连接单独工作,但如果与 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"

【问题讨论】:

  • 什么是完整的语法错误消息,mysql 在哪里声称它在您的查询中出现?
  • 已编辑完整的错误消息!希望对您有所帮助。

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


【解决方案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)

【讨论】:

  • union all 不会解决语法错误。它只是告诉 mysql 允许在结果中显示“重复”行。
  • 我应该怎么知道?我看起来像OP吗?
  • 分号并没有增加太多,因为它是作为一个完整的查询而不是一个脚本。我认为这不会有什么不同。附言我刚刚测试了它......它没有。无论如何感谢您的建议!
  • 语法错误消失了,但是,FULL OUTER JOIN 不正确(表现得像一个普通的左外连接)。不过,这很可能是由于我的语义。谢谢!我会认为这个问题已经解决了;-)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
相关资源
最近更新 更多