访问 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的left join right join inner join之间的区别
SQL之LEFT JOIN,EIGHT JOIN,INSERT JOIN的区别
SQL 数据库 right join 和left join 的区别