SQL连接表帮助 - 过滤结果

时间:2015-12-11 15:56:33

标签: sql ms-access ms-access-2010

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

我有两个表有多对多的关系(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

有什么想法吗?

2 个答案:

答案 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不提供此运算符。请参阅此链接以获取解决方法:

https://stackoverflow.com/questions/337158/how-can-i-implement-sql-intersect-and-minus-operations-in-ms-access