我有一个多对多关系,其中我查询具有特定 N 的所有 M,例如:
SELECT M.* FROM M INNER JOIN ManyToManyTable
ON M.Id = ManyToManyTable.M
WHERE ManyToManyTable.N = @Id
或者:
SELECT M.* FROM M INNER JOIN ManyToManyTable
ON M.Id = ManyToManyTable.M
INNER JOIN N
ON N.Id = ManyToManyTable.N
WHERE N.Id = @Id
我的问题是,如何有效地反转查询,以便获得没有特定 N 的所有 M?
也就是说,就像上面的选择中的 NOT IN
一样,但如果可能的话,没有 NOT IN
语句。
最佳答案
在 SQL Server 中,“不存在”通常是 more efficient比 OUTER JOIN 方法。
SELECT M.* FROM M
WHERE NOT EXISTS
(SELECT * FROM ManyToManyTable MMT
WHERE MMT.M = M.Id AND N=@Id )
关于sql - 如何有效地反转多对多 SQL 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3227986/