SQL:完全外部联接不起作用

时间:2015-05-07 04:40:37

标签: mysql sql database join

我有两张桌子,其中一张是空的,但另一张不是。

我知道我不能使用Inner JOIN,因为它只会匹配ON部分中指定的值。在这种情况下,一个表没有值。

SELECT  t0.hugot_id                     as hugot_id,
        t0.upvotes                      as upvotes,
        t1.comment_count                as comment_count
FROM
    hugot_votes_stats as t0
FULL OUTER JOIN
    hugot_comment_stats as t1
ON
    t0.hugot_id = t1.hugot_id

这是我使用FULL JOIN计算的部分。我所期待的是,如果没有找到空表(在这种情况下为comment_count)将显示默认值(即:0)。

然而,我发现错误,因为您可以看到 1064 - 您的SQL语法出错了;检查与MySQL服务器版本对应的手册,以便在

附近使用正确的语法

3 个答案:

答案 0 :(得分:5)

MySQL没有语法关键字FULL OUTER JOIN.您必须使用LEFT和RIGHT JOIN的组合来获得完整的连接。

SELECT  t0.hugot_id                     as hugot_id,
        t0.upvotes                      as upvotes,
        t1.comment_count                as comment_count
FROM
    hugot_votes_stats as t0
LEFT JOIN
    hugot_comment_stats as t1
ON
    t0.hugot_id = t1.hugot_id

UNION ALL 

SELECT  t0.hugot_id                     as hugot_id,
        t0.upvotes                      as upvotes,
        t1.comment_count                as comment_count
FROM
    hugot_votes_stats as t0
RIGHT JOIN
    hugot_comment_stats as t1
ON
    t0.hugot_id = t1.hugot_id

答案 1 :(得分:4)

您收到该错误是因为MySQL不支持(或识别)$rootScope.$broadcast语法。

但是,可以在MySQL中模拟FULL OUTER JOIN。

我们实际上需要两个查询。

一个查询返回左侧表中的所有行。 (左外连接。)

我们需要附加第二个查询的结果,它看起来就像第一个,除了,我们需要右侧的表作为驱动程序我们需要消除所有匹配的行(以避免重复第一个查询中返回的行。)

我们使用FULL OUTER JOIN集合运算符将第二个查询的结果附加到第一个查询。

举个例子:

UNION ALL

请注意第二个查询的WHERE子句中的谓词。这会筛选出找到匹配项的所有行。 (第一个查询已经返回了这些行;第二个查询使用"反连接"模式返回SELECT t0.hugot_id AS hugot_id , t0.upvotes AS upvotes , t1.comment_count AS comment_count FROM hugot_votes_stats t0 LEFT JOIN hugot_comment_stats t1 ON t0.hugot_id = t1.hugot_id UNION ALL SELECT t0.hugot_id AS hugot_id , t0.upvotes AS upvotes , t1.comment_count AS comment_count FROM hugot_votes_stats t0 RIGHT JOIN hugot_comment_stats t1 ON t0.hugot_id = t1.hugot_id WHERE t0.hugot_id IS NULL 中没有匹配的行。

答案 2 :(得分:1)

您可以使用类似的内容来显示您的信息:

SELECT  t0.hugot_id,
        t0.upvotes,
        ifnull(t1.comment_count,0) as commentcount
FROM
    hugot_votes_stats as t0
left join
    hugot_comment_stats as t1
ON
    t0.hugot_id = t1.hugot_id