Sql Query左外连接

时间:2014-06-18 07:51:54

标签: sql sql-server

在下面的SQL查询中,我有2个表,文档和文档用户映射。在文档表中,它包含documentId,documentname和userid列;在doumnent usermap表中,它有documentid和userid。我们创建的文档将在documenttable(创建文档,userid)中。我们与其他用户共享的文档将位于documentusermap表(documentid .other 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

4 个答案:

答案 0 :(得分:1)

很难理解你的问题,但如果我理解了这就是你想要的 - 一份与你共享的文件清单,但不包括你拥有的文件。在这种情况下,没有理由这是LEFT联接。

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

答案 1 :(得分:0)

试试这个

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

答案 2 :(得分:0)

我首先要查找DocumentUserMapping中与我共享的文档,然后获取文档信息

SELECT Doc.UserID,
       Doc.DocumentID,
       Doc.DocumentName 
FROM   DocumentUserMapping DUM
       INNER JOIN Documents Doc ON DUM.DocumentID = Doc.DocumentID 
WHERE  DUM.UserID = %myID%

答案 3 :(得分:0)

尝试此查询

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