繁体   English   中英

SQL查询左外连接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM