SQL Junction Table 帮助 - 筛选结果

SQL Junction Table Help - Filtering Results

我有一个问题,其答案可能太明显了,但我似乎遗漏了它。

我有两个具有多对多关系的 table(table1 和 table2),并且在结点 table 之间(table1_table2.) 我可以使用 say

查询此联结点 table 以根据参数给我数据
`SELECT * 
FROM Table1_table2 
WHERE fk_table2 = x;`

但是,因为我不可避免地在 table1 中有一些记录具有来自 table2 的多个可能值,所以查询完全相反的 returns 一些记录的外键为table1 没有我为 fk_table2 请求的值。也就是在这个table(粗略的描写我深表歉意)...

fk_table1 |fk_table2
1         | 4
1         | 8
2         | 8
3         | 8

...这个查询...

`SELECT *
FROM table1_table2
WHERE fk_table <> 8;`

..would return fk_table1 = 1 及其在 table2.

中的相关值

所以,这是我的问题:

如果在 fk_table2 中满足过滤条件,则不显示具有相关 fk_table1 的所有其他记录的查询的最佳方法是什么?

如果您已经关注,基本上避免 fk_table2 = 8 的查询应该 return 什么都没有,因为 fk_table1 = 1 已经被考虑在内。

有什么想法吗?

在其他 DBMS 中,您可以使用 EXCEPT 或 MINUS,但 MS Access 不提供此运算符。请参阅此 link 以了解解决方法:

NOT IN 与子查询一起使用应该有效:

select *
  from Table1_table2
 where fk_table1 not in (select fk_table1
                           from Table1_table2
                          where fk_table2 = 8)