SQL 联结表帮助 - 筛选结果

Posted

技术标签:

【中文标题】SQL 联结表帮助 - 筛选结果【英文标题】:SQL Junction Table Help - Filtering Results 【发布时间】:2015-12-11 15:56:33 【问题描述】:

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

我有两个具有多对多关系的表(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 已经被考虑在内。

有什么想法吗?

【问题讨论】:

@sstan 我目前正在使用 MS Access,尽管我认为这个问题足够普遍,可以标记多个 DBMS。 【参考方案1】:

NOT IN 与子查询一起使用应该可以:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于SQL 联结表帮助 - 筛选结果的主要内容,如果未能解决你的问题,请参考以下文章

sql 的并集UNION和内联结INNER JOIN 有啥区别?感觉结果是一样的。

mysql结果集筛选排序

感恩笔记之SQL查询功能最简使用模板

联结表

Oracle数据库-多表联合查询&子查询

MySQL----联结