[英]Sql Query left outer join
在下面的SQL查询中,我有2个表,文档和文档用户映射。 在documents表中,它具有documentId,documentname和userid列; 在主要的usermap表中,它具有documentid和userid。 我们创建的文档将在documenttable中(创建的documentid,userid)。 我们共享给其他用户的文档将位于documentusermap表中(documentid .other userid)。在这里,我必须将我的userid传递给sp
我的目标是要获取其他用户为我共享的文档。
@i_userid int,
SELECT Doc.UserID,
Doc.DocumentID,
Doc.DocumentName
FROM Documents Doc
LEFT OUTER JOIN DocumentUserMapping DUM
ON DUM.DocumentID = Doc.DocumentID
AND DUM.UserID != Doc.UserID
很难理解您的问题,但如果我确实理解,这就是您想要的-与您共享的文档列表,但不包括您拥有的文档。 在这种情况下,没有理由这将成为左联接。
-- Return documents shared to me that I do not own
SELECT Doc.UserID,
Doc.DocumentID,
Doc.DocumentName
FROM Documents Doc
JOIN DocumentUserMapping DUM
ON DUM.DocumentID = Doc.DocumentID
AND DUM.UserID = @i_userid -- Shared to me
WHERE Doc.UserID != @i_userid -- Not owned by me
或者,您希望拥有自己的两个文档,并且希望将文档共享给您; 最简单的方法如下所示:
-- Return documents shared to me AS WELL AS docs I own
SELECT Doc.UserID,
Doc.DocumentID,
Doc.DocumentName
FROM Documents Doc
WHERE Doc.UserID = @i_userid -- Docs I own
-- Or.. Docs shared
OR EXISTS (SELECT 1 FROM DocumentUserMapping WHERE DocumentID = Doc.DocumentID AND UserID = @i_userid)
尝试这个
SELECT Doc.UserID,
Doc.DocumentID,
Doc.DocumentName
FROM Documents Doc
LEFT JOIN DocumentUserMapping DUM
ON Doc.DocumentID = DUM.DocumentID
where Doc.UserID=101;
在这里,我已将101作为您的用户ID
我将从在DocumentUserMapping
查找共享给我的DocumentUserMapping
,然后获取文档信息
SELECT Doc.UserID,
Doc.DocumentID,
Doc.DocumentName
FROM DocumentUserMapping DUM
INNER JOIN Documents Doc ON DUM.DocumentID = Doc.DocumentID
WHERE DUM.UserID = %myID%
试试这个查询
SELECT Doc.UserID,
Doc.DocumentID,
Doc.DocumentName
FROM Documents Doc
JOIN DocumentUserMapping DUM
ON DUM.DocumentID = Doc.DocumentID
WHERE Doc.UserID != @i_userid
AND DUM.UserID = @i_userid
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.