【问题标题】:why does my full join query fail?为什么我的完全连接查询失败?
【发布时间】:2011-11-13 07:19:17
【问题描述】:

我有这个问题:

SELECT *, default_insurance.company AS company
FROM (default_insurance)
JOIN default_gruppe_rel
     ON default_gruppe_rel.uid = default_insurance.uid
JOIN default_profiles
     ON default_insurance.uid = default_profiles.id
WHERE `kontakt` = '1' 

现在我从中得到一个结果集,但是如果我想获得没有连接匹配的结果,并且只能通过将第一个连接类型更改为 FULL 来更改此查询

SELECT *, default_insurance.company AS company
FROM (default_insurance)
FULL JOIN default_gruppe_rel
    ON default_gruppe_rel.uid = default_insurance.uid
JOIN default_profiles
    ON default_insurance.uid = default_profiles.id
WHERE `kontakt` = '1' 

我收到一条错误消息: 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的“FULL JOIN default_gruppe_rel ON default_gruppe_rel.uid = default_insurance.uid J”附近使用正确的语法

这是为什么呢?是我的 MYSQL 版本的 FULL JOIN 未知吗?是否已弃用?

【问题讨论】:

标签: mysql sql join


【解决方案1】:
...LEFT JOIN...
UNION ALL
...RIGHT JOIN...

【讨论】:

  • 你的意思是UNION而不是UNION ALL
  • @onedaywhen: 是的,除非完整的外连接使用 NULL 检查来捕获两边的不匹配
【解决方案2】:

MySQL 不支持FULL JOINSee the MySQL docs 了解用户 cmets 中提供的一些解决方法。

【讨论】:

    【解决方案3】:

    FULL JOIN 仅适用于某些 RDBMS...尝试 LEFT OUTER JOIN/LEFT JOIN 以获取第一个表中的所有记录以及后续表中的所有匹配项。

    您也可以尝试 CROSS JOIN,这不是真正的连接,而是返回“连接”表的笛卡尔积(即所有可能的组合)。

    【讨论】:

    • -1,还有@Jakob,LEFT join 肯定不等于full join!
    • @Johan - 您是否愿意详细说明,或者您会说阅读手册应该相当明显:)?
    • 完全连接几乎与(左连接与右连接联合)相同。 (99.99% 的情况都是一样的)左连接是一个非常不同的东西,因为它只给出了一半的数据。请参阅此处了解更多信息:codinghorror.com/blog/2007/10/…
    • “CROSS JOIN... 并不是真正的连接,而是返回笛卡尔积”——您能否详细说明您的意思。例如我不认为“笛卡尔积”对非数学家有多大意义;)
    猜你喜欢
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-26
    • 2021-07-02
    相关资源
    最近更新 更多