【问题标题】:MySQL FULL JOIN not working but RIGHT and LEFT join worksMySQL FULL JOIN 不工作,但 RIGHT 和 LEFT 加入工作
【发布时间】: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

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

【问题讨论】:

    标签: mysql join full-outer-join


    【解决方案1】:

    【讨论】:

    • 用 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 
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      • 2020-03-07
      • 2021-02-23
      • 1970-01-01
      相关资源
      最近更新 更多