Sql查询左外部联接

Sql查询左外部联接,sql,sql-server,Sql,Sql Server,在下面的SQL查询中,我有两个表、文档和文档用户映射。文档表中有documentId、documentname和userid列;在doumnent usermap表中,它有documentid和userid。我们创建的文档将在documenttable中(创建的documentid、userid)。我们共享给其他用户的文档将位于documentusermap表(documentid.other userid)中 我的目标是获取其他用户为我共享的文档 @i_userid int, SELECT

在下面的SQL查询中,我有两个表、文档和文档用户映射。文档表中有documentId、documentname和userid列;在doumnent usermap表中,它有documentid和userid。我们创建的文档将在documenttable中(创建的documentid、userid)。我们共享给其他用户的文档将位于documentusermap表(documentid.other userid)中

我的目标是获取其他用户为我共享的文档

@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
试试这个

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
中查找共享给我的文档,然后获取文档信息

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

你的问题很难理解,但如果我理解的话,这就是你想要的——一个共享给你的文档列表,但不包括你自己的文档。在这种情况下,没有理由使用左连接

-- 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)

你的问题是什么?嘿,我的目标是我有我的用户id 1,我创建了一个新文档,它的文档id是2。现在另一个用户的用户id是2,他创建了一个文档,它的id是3。现在他想和我共享他的文档。所以它应该显示documentid 3。我的目标是我的目标,你在哪里维护文档所指向的id列表共享…?是的,我在文档表中维护id列表嘿,我的目标是我有我的用户id 1,我创建了一个新文档,它的文档id是2。现在另一个用户的用户id是2,他创建了一个文档,它的id是3。现在他想与我共享他的文档。所以它应该显示documentid 3。这就是我的目标