简体   繁体   English

SQL查询左外连接

[英]Sql Query left outer join

In the SQL query below, I have 2 tables, documents and document user map. 在下面的SQL查询中,我有2个表,文档和文档用户映射。 In documents table it has columns documentId, documentname and userid; 在documents表中,它具有documentId,documentname和userid列; and in doumnent usermap table it has documentid and userid. 在主要的usermap表中,它具有documentid和userid。 The documents that we create will be in documenttable (created documentid, userid). 我们创建的文档将在documenttable中(创建的documentid,userid)。 The documents we share to other users will be in documentusermap table (documentid .other userid).here i have to pass my userid to sp 我们共享给其他用户的文档将位于documentusermap表中(documentid .other userid)。在这里,我必须将我的userid传递给sp

My aim is I want to get documents what other users shared for me. 我的目标是要获取其他用户为我共享的文档。

@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

Hard to understand your question but if I did understand it this is what you want - a list of documents that are shared to you, but excluding docs that you own. 很难理解您的问题,但如果我确实理解,这就是您想要的-与您共享的文档列表,但不包括您拥有的文档。 There's no reason this would be a LEFT join in this case. 在这种情况下,没有理由这将成为左联接。

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

Alternatively you want both docs you own, AND docs shared to you; 或者,您希望拥有自己的两个文档,并且希望将文档共享给您; simplest way shown below: 最简单的方法如下所示:

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

Try this 尝试这个

SELECT      Doc.UserID,
            Doc.DocumentID,
            Doc.DocumentName 

FROM        Documents Doc 

LEFT JOIN DocumentUserMapping DUM 
    ON      Doc.DocumentID = DUM.DocumentID 
    where   Doc.UserID=101;

here I've taken 101 as your user id 在这里,我已将101作为您的用户ID

I would start by looking for document that are shared to me in the DocumentUserMapping to then get the document information 我将从在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%

Try this query 试试这个查询

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