首页 > 解决方案 > 查找另一个表中不存在的行

问题描述

我有以下表格。

应用表

Id: 1, 2, 3

用户表

Id, 1, 2, 3

ApplicationUser 表(一个桥接表)

AppId   UserId
1       1
1       2
2       1
2       3

我需要一个 SQL 查询来填充 ApplicationUser 表(即表应该是)

ApplicationUser Table (A bridge table)
AppId   UserId
1       1
1       2
1       3
2       1
2       2
2       3
3       1
3       2
3       3

所以查询应该返回(1, 3) (2, 2) (3, 1) (3, 2) (3, 3)

标签: sqlsql-servertsql

解决方案


使用存在逻辑的交叉连接:

INSERT INTO ApplicationUser (AppId, UserId)
SELECT a.Id, u.Id
FROM Application a
CROSS JOIN User u
WHERE NOT EXISTS (SELECT 1 FROM ApplicationUser au
                  WHERE au.AppId = a.Id AND au.UserId = u.Id);

推荐阅读