访问 SQL LEFT JOIN 不返回结果

Posted

技术标签:

【中文标题】访问 SQL LEFT JOIN 不返回结果【英文标题】:Access SQL LEFT JOIN not returning results 【发布时间】:2014-03-29 14:41:24 【问题描述】:

我有三个表:Comments、Users 和 CommentsHelpfulness。

用户可以提交多个 cmets,这些 cmets 存储在 Comments 表中。

CommentsHelpfulness 包含三列:UserID、CommentID 和一个“Helpful”布尔值。每个用户都可以指出每条评论是否有用,这将在 CommentsHelpfulness 表中创建一个条目。

我想要一个查询,它可以为我提供所有评论 ID,以及提交它的用户的名称,并显示当前登录的用户是否觉得它有帮助、没有发现它有帮助或没有说任何关于它的信息。因此,当前用户未发表意见的评论 ID 仍应输出,只是没有有用的布尔值。

对我来说,这听起来应该使用左连接来完成:

SELECT Comments.ID, Users.Nom, CommentsHelpfulness.Helpful FROM (Comments INNER JOIN Users ON Comments.UserID = Users.ID) LEFT JOIN CommentsHelpfulness ON (CommentsHelpfulness.CommentID = Comments.ID AND (CommentsHelpfulness.UserID = ?))

不幸的是,如果没有 CommentsHelpfulness 表中的条目,这不会输出评论 ID。为什么这不起作用?是因为Access吗?

【问题讨论】:

【参考方案1】:

我认为问题在于inner join,而不是left join

尝试删除该表:

SELECT c.ID, ch.Helpful
FROM Comments as c LEFT JOIN
     CommentsHelpfulness as ch
     ON ch.CommentID = c.ID AND
        ch.UserID = ?

【讨论】:

很抱歉,我尽量使查询尽可能简短,并删除了一些我需要的字段。我实际上也需要用户表中的用户名。我编辑了我的问题。 但是你是对的,如果我把 INNER JOIN 拿出来,它就可以工作。我现在只需要找到一种方法来从用户表中获取我需要的数据。 原来问题只是我添加参数的方式,查询实际上工作正常。感谢您的帮助!【参考方案2】:
select c.id, c.Nom, d.Helpful from (
select a.ID, b.Nom from Comments a left join Users b
on a.UserID = b.ID) c left join CommentsHelpfulness d
on d.CommentID = c.ID;

【讨论】:

以上是关于访问 SQL LEFT JOIN 不返回结果的主要内容,如果未能解决你的问题,请参考以下文章

SQL中join和left join的区别

sql的left join right join inner join之间的区别

SQL之LEFT JOIN,EIGHT JOIN,INSERT JOIN的区别

SQL 数据库 right join 和left join 的区别

sql的left join right join inner join之间的区别

sql之left joinright joininner join的区别