我有一个问题,其答案可能太明显但我似乎错过了它。
我有两个表有多对多的关系(table1和table2),并且在一个联结表(table1_table2。)之间。我可以查询这个联结表,根据参数给我数据,比如说
`SELECT *
FROM Table1_table2
WHERE fk_table2 = x;`
但是,因为我不可避免地在table1中有一些记录,这些记录有来自table2的多个可能值,查询完全相反的返回一些记录,其中table1的外键没有我要求的值为fk_table2。也就是说,在这张表中(我为粗略的描述道歉)......
fk_table1 |fk_table2
1 | 4
1 | 8
2 | 8
3 | 8
......这个查询......
`SELECT *
FROM table1_table2
WHERE fk_table <> 8;`
..将在table2中返回fk_table1 = 1
及其相关值。
所以,这是我的问题:
接近查询的最佳方法是,如果在fk_table2中满足过滤条件,则不显示所有其他具有相关fk_table1的记录?
如果您已关注,则基本上避免fk_table2 = 8
的查询应该不返回任何内容,因为已经考虑了fk_table1 = 1
。
有什么想法吗?
答案 0 :(得分:0)
将NOT IN
与子查询一起使用应该有效:
select *
from Table1_table2
where fk_table1 not in (select fk_table1
from Table1_table2
where fk_table2 = 8)
答案 1 :(得分:-1)
在其他DBMS中,您可以使用EXCEPT或MINUS,但MS Access不提供此运算符。请参阅此链接以获取解决方法: