如果另一个表中的关系丢失,如何插入记录(sql server)?

如果另一个表中的关系丢失,如何插入记录(sql server)?,sql,tsql,Sql,Tsql,我希望你能帮助我 我有这样一个场景: UserFolders Folders Id | UserId |FolderName |FolderId Id |FolderName 1 | 1 | folder1 | 1 1 | folder1 2 | 2 | folder1 | 1

我希望你能帮助我

我有这样一个场景:

    UserFolders                              Folders                
Id |    UserId  |FolderName |FolderId       Id |FolderName
1  |      1     |  folder1  |   1            1 |  folder1
2  |      2     |  folder1  |   1            2 |  folder2
3  |      2     |  folder2  |   2            3 |  folder3
现在,我需要每个用户都有一个文件夹,所以如果UserFolders表中缺少一些文件夹,我必须插入它们。结果应该是:

    UserFolders                                             
Id  |UserId    |FolderName  |FolderId       
1   |  1       |   folder1  |   1                 
2   |  1       |   folder2  |   2
3   |  1       |   folder3  |   3
4   |  2       |   folder1  |   1
5   |  2       |   folder2  |   2                 
6   |  2       |   folder3  |   3   

我尝试过左连接和右连接,但无法解决此问题。非常感谢您的帮助。

您可以使用
交叉连接,然后过滤掉现有的连接。要获取缺少的对,请执行以下操作:

select userid, folderid
from (select distinct userid from userfolders) u cross join
     folders f left join
     userfolders uf
     on uf.userid = u.userid and uf.folderid = f.folderid
where uf.userid is null;
添加一个
insert
将值插入
userfolders

请注意,我没有包括文件夹名称。您不应复制此数据。在
文件夹
表中查找

此外,您可能有更好的用户来源,但问题中没有提到