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