MySQL FULL JOIN 不工作,但 RIGHT 和 LEFT 加入工作

Posted

技术标签:

【中文标题】MySQL FULL JOIN 不工作,但 RIGHT 和 LEFT 加入工作【英文标题】:MySQL FULL JOIN not working but RIGHT and LEFT join works 【发布时间】:2011-05-30 17:03:01 【问题描述】:

这让我发疯了。我有两个表正在尝试执行连接,usersXstats 和 usersXstats_alltime。

两个表具有相同的列:id、userId、statId 和 value

我想做的是

SELECT * 
FROM usersXstats 
FULL JOIN usersXstats_alltime 
ON usersXstats.userId=usersXstats_alltime.userId 
AND usersXstats.statId=usersXstats_alltime.statId

然而这又回来了

Unknown column 'usersXstats.userId' in 'on clause'

将 FULL JOIN 替换为 LEFT JOIN、RIGHT JOIN 或 INNER JOIN 时,此查询的工作方式与预期一样。

为了便于阅读,我编写了以下查询:

SELECT * 
FROM usersXstats as uxs 
FULL JOIN usersXstats_alltime as uxsat 
ON uxs.userId=uxsat.userId 
AND uxs.statId=uxsat.statId

返回不同的错误:

check the manual that corresponds to your mysql server version for the right syntax to use near 'FULL JOIN usersXstats_alltime as uxsat ON uxs.userId=uxsat.userId AND uxs.statId' at line 1

我到底做错了什么?提前致谢!

【问题讨论】:

【参考方案1】:

MySQL 不支持 FULL JOIN

http://en.wikipedia.org/wiki/Join_%28SQL%29#Full_outer_join

【讨论】:

用 FULL OUTER JOIN 替换 FULL JOIN 会返回错误:检查与您的 MySQL 服务器版本相对应的手册,以获取在“OUTER JOIN usersXstats_alltime ON usersXstats.userId=usersXstats_alltime.userId”附近使用的正确语法第 1 行 阅读链接中的完整部分,提供了一个 MySQL 解决方案。 哦,愚蠢的我读得不够远。我认为第一个例子是 MySQL。谢谢!【参考方案2】:

看看这个How to simulate FULL OUTER JOIN in MySQL。 它可能会有所帮助。

【讨论】:

谢谢,我能够使用 UNION 获得我想要的结果,但这看起来不是有点乱吗?我不应该能够通过完整的外部联接来做到这一点吗? 没关系。我猜 MySQL 不支持 FULL JOIN。谢谢你的回答 请在帖子中添加信息,以防链接失效【参考方案3】:

FULL OUTER JOIN 在 mysql 中不支持。

您可以使用 UNION(从 MySQL 4.0.0 开始)模拟 FULL OUTER JOIN

有两个表 usersXstats,usersXstats_alltime

SELECT * FROM usersXstats
LEFT JOIN usersXstats_alltime ON usersXstats.userId= usersXstats_alltime.userId
UNION
SELECT * FROM usersXstats
RIGHT JOIN usersXstats_alltime ON usersXstats.statId= usersXstats_alltime.statId

【讨论】:

【参考方案4】:
SELECT Person1.Firstname, Person2.State
FROM Person1
left JOIN Person2
ON Person1.PersonID=Person2.PersonID
UNION
SELECT Person1.Firstname, Person2.State
FROM Person1
right JOIN Person2
ON Person1.PersonID=Person2.PersonID;

运行良好。

【讨论】:

嗨 Rajesh - 如果您在代码中每行的开头添加 4 个空格,那么它将被正确格式化为代码块 :)【参考方案5】:

我不知道是什么问题,但我也遇到了同样的问题,所以你可以试试这个:

SELECT * 
FROM usersXstats 
Left JOIN usersXstats_alltime 
ON usersXstats.userId=usersXstats_alltime.userId
Union
SELECT * 
FROM usersXstats 
RightJOIN usersXstats_alltime 
ON usersXstats.userId=usersXstats_alltime.userId 

【讨论】:

欢迎来到 SO。你的答案等于其他已经给出的答案。 ***.com/a/8950981/1138946.

以上是关于MySQL FULL JOIN 不工作,但 RIGHT 和 LEFT 加入工作的主要内容,如果未能解决你的问题,请参考以下文章

在 MySQL 中执行 FULL OUTER JOIN 查询时出错 [重复]

为啥 Mysql JOIN Query - Full SCAN 不使用索引

mysql实现full join

如何在 MySQL 中进行 FULL OUTER JOIN?

如何在 MySQL 中进行 FULL OUTER JOIN?

如何在 MySQL 中进行 FULL OUTER JOIN?