如何有效地反转多对多SQL查询?

GeR*_*ReV 2 sql t-sql sql-server

我有一个多对多的关系,我查询所有具有特定N的M,例如:

SELECT M.* FROM M INNER JOIN ManyToManyTable
ON M.Id = ManyToManyTable.M
WHERE ManyToManyTable.N = @Id
Run Code Online (Sandbox Code Playgroud)

要么:

SELECT M.* FROM M INNER JOIN ManyToManyTable
ON M.Id = ManyToManyTable.M
INNER JOIN N
ON N.Id = ManyToManyTable.N
WHERE N.Id = @Id
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何有效地反转查询,所以我得到所有没有特定N的M

也就是说,NOT IN如上所述,但NOT IN如果可能的话,没有声明.

Mar*_*ith 5

在SQL Server中,"NOT EXISTS"通常比OUTER JOIN方法更有效.

SELECT M.* FROM M  
WHERE NOT EXISTS
 (SELECT * FROM ManyToManyTable MMT
           WHERE MMT.M = M.Id AND N=@Id )
Run Code Online (Sandbox Code Playgroud)