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 联结表帮助 - 筛选结果的主要内容,如果未能解决你的问题,请参考以下文章