admin

关于LEFT JOIN SQL查询的WHERE帮助

sql

我正在尝试构造一个查询,该查询将包括指示用户是否下载了文档的列。我有一个名为HasDownloaded的表,其中包含以下各列:id,documentID,memberID。找出用户是否下载了
特定 文档很容易;但我需要生成一个查询,其结果将如下所示:

name              id
----------------------
abc               NULL
bbb               2
ccc               53
ddd               NULL
eee               13

该ID并不是很重要;我感兴趣的是文档是否已下载(是否为NULL)。

这是我的查询:

SELECT Documents.name, HasDownloaded.id FROM Documents
LEFT JOIN HasDownloaded ON HasDownloaded.documentID = Documents.id
WHERE HasDownloaded.memberID = @memberID

问题是,只有在HasDownloaded表中存在指定用户的条目时,这才会返回值。我想保持简单,只在HasDownloaded中 包含
已下载文档的条目。因此,如果用户1下载了abc,bbb和ccc,我仍然希望ddd和eee出现在结果表中,而id为NULL。但是WHERE子句只为我提供了存在条目的值。

我不是很多SQL专家-在这里有一个运算符可以给我我想要的吗?我应该采取其他方法吗?还是这不可能?


阅读 185

收藏
2021-05-10

共1个答案

admin

将WHERE子句中的条件移到联接条件。

SELECT Documents.name, HasDownloaded.id FROM Documents
LEFT JOIN HasDownloaded ON HasDownloaded.documentID = Documents.id 
  AND HasDownloaded.memberID = @memberID

每当您想在WHERE子句中引用左联接表时,这都是必需的。

2021-05-10