当前位置: 首页 > 面试题库 >

为什么MySQL在FULL OUTER JOIN上报告语法错误?

赖杰
2023-03-14
问题内容
SELECT airline, airports.icao_code, continent, country, province, city, website

FROM airlines 
FULL OUTER JOIN airports ON airlines.iaco_code = airports.iaco_code
FULL OUTER JOIN cities ON airports.city_id = cities.city_id
FULL OUTER JOIN provinces ON cities.province_id = provinces.province_id
FULL OUTER JOIN countries ON cities.country_id = countries.country_id
FULL OUTER JOIN continents ON countries.continent_id = continents.continent_id

它说

您的SQL语法有误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以airports在第4行“ airlines.iaco_code
= airport.iaco_code完全外部联接”附近使用

语法对我来说似乎正确。我以前从未做过很多联接,但是我需要一个表中的那些列,这些列被各种ID交叉引用。


问题答案:

FULL OUTER JOINMySQL中没有。见7.2.12。外连接简化和12.2.8.1。JOIN语法:

您可以FULL OUTER JOIN使用UNION(从MySQL 4.0.0开始)进行仿真:

有两个表t1,t2:

SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
UNION
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id

有三个表t1,t2,t3:

SELECT * FROM t1
LEFT JOIN t2 ON t1.id = t2.id
LEFT JOIN t3 ON t2.id = t3.id
UNION
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
LEFT JOIN t3 ON t2.id = t3.id
UNION
SELECT * FROM t1
RIGHT JOIN t2 ON t1.id = t2.id
RIGHT JOIN t3 ON t2.id = t3.id


 类似资料:
  • 由于某种原因,jar在TypeSafe的bintray中不再可用。最大的版本是0.13.9。 我知道获取它的地方是https://repo.typesafe.com/typesafe/ivy-release/,但是我如何告诉sbt使用这个回购呢? 我已经试过: null 如何告诉sbt在哪里获取二进制文件?

  • 我试图通过一个类中的函数连接到MySql。同样的事情可以做得更容易,但这也是一次学习的经历。代码全部按预期工作,但是如果MySql查询失败,mysqli_error()返回空白,mysqli_errno()返回0。我在手动将数据输入mysql时发现了错误,并且它在db中是一个太短的列,但是我不明白为什么mysqli_error()和mysql_errno()都没有报告这个错误。提前感谢您的任何帮助

  • 我正在尝试使用JUnit错误收集器报告错误。虽然我的断言失败了,但JUnit中并没有报告错误。但我在控制台中收到了“错误”信息。

  • 问题内容: 在另一个答案中,我发现了一个奇怪的语法: 这是由mysql很好执行的。 为什么我认为它应该失败: 子查询没有别名 整个查询缺少子句 我发现运行起来很意外,也没有解释为什么运行的原因。 它不符合https://dev.mysql.com/doc/refman/5.5/en/select.html上定义的语法 那么,为什么有效呢?有参考吗? 问题答案: 这是带有final的替代语法。 这是

  • 问题内容: 我的sql语句出了什么问题,它说问题在FULL JOIN附近,但是我很困惑: 请温柔些,因为我不是sql Fundi 问题答案: MySQL不提供完全连接,您可以使用 一对LEFT + RIGHT和UNION;或者 使用LEFT,RIGHT和INNER和UNION ALL的三元组 该查询也非常错误,因为您有GROUP BY,但是SELECT列不是聚合的。 将其正确转换为LEFT + R