我正在尝试构建一个查询,其中包含一个列,指示用户是否已下载文档.我有一个名为HasDownloaded的表,其中包含以下列:id,documentID,memberID.找出用户是否已下载特定文档很容易; 但我需要生成一个查询,其结果将如下所示:
name id ---------------------- abc NULL bbb 2 ccc 53 ddd NULL eee 13
身份证并不重要; 我感兴趣的是文件是否已下载(是否为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专家 - 有没有一个运营商会给我我想要的东西?我应该采取不同的方法吗?或者这不可能吗?
将WHERE子句中的条件移动到连接条件.
SELECT Documents.name, HasDownloaded.id FROM Documents LEFT JOIN HasDownloaded ON HasDownloaded.documentID = Documents.id AND HasDownloaded.memberID = @memberID
每当您想要在WHERE子句中引用左连接表时,这是必要的.