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 OUTER JOIN?