SQL: FULL Outer Join Not Working
本问题已经有最佳答案,请猛点这里访问。
我有两张桌子,一张空着,另一张没有。
- Hugot_投票统计:http://prntscr.com/72ft7d
- Hugot_Comment_Stats:空
我理解我不能使用内部联接,因为它只匹配on部分中指定的值。在这种情况下,一个表没有值。
1 2 3 4 5 6 7 8 9 |
这是我使用完全联接计算的部分。我所期望的是,如果没有找到,空表(在本例中是注释计数)将显示默认值(即:0)。
然而,我得到了一个错误,正如您所看到的1064-您的SQL语法中有一个错误;请查看与您的MySQL服务器版本相对应的手册,以获得在附近使用的正确语法。
MySQL没有语法关键字
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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 |
这是因为MySQL不支持(或不识别)
但是,在MySQL中可以模拟完整的外部连接。
我们实际上需要两个查询。
一个查询返回左侧表中的所有行。(左外部连接。)
我们需要将第二个查询的结果附加到该查询中,这看起来就像第一个查询,只是我们需要右侧的表作为驱动程序,并且需要消除所有匹配的行(以避免复制第一个查询中返回的行)。
我们使用
例如:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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 |
注意第二个查询的WHERE子句中的谓词。它过滤掉所有找到匹配的行。(这些行已由第一个查询返回;第二个查询使用"反联接"模式从
您可以使用类似的内容来显示您的信息:
1 2 3 4 5 6 7 8 9 |
号