【发布时间】:2022-01-20 07:13:38
【问题描述】:
假设我有一张 animal 桌和一张 competition 桌,其关系为 1:n。
表格动物看起来像:
| id_animal | type |
|---|---|
| 1 | cat |
| 2 | dog |
表比赛看起来像:
| id_competition | fid_animal | name |
|---|---|---|
| 1 | 1 | A |
| 2 | 2 | A |
| 3 | 2 | B |
这意味着猫参加比赛 A,狗参加比赛 A 和 B。
我现在想根据表 competition 中的条目过滤表 animal。
查询听起来像:
向我展示所有参加比赛(名称)A 而不是 B 的动物(类型)。结果应该只给我猫,而不是狗。
我用下面的 sql(简化)试试运气:
Select DISTINCT * FROM animal
LEFT JOIN competition ON id_animal = fid_animal
WHERE competition.name IN ("A") AND NOT competition.name IN ("B");
结果我得到了猫和狗。
只有 AND NOT 把狗还给我,这很好,但两者一起都没有给我想要的结果。
我做错了什么?如何实现输出?
提前谢谢你!
背景: 我有一个包含大量条目的绑定表单(数据表)和一个表作为数据源。用户应该能够根据相关 (1:n) 表中的参数过滤表单。所以我用列表框(填充了相关表的可能条目)制作了一个未绑定的表单,用户可以在其中选择多个条件。结果是一个类似上面的 sql 语句,用作绑定表单的新数据源。这个逻辑运行良好。问题是有时表单中的条目可以有多个参数,对于用户来说,按所选参数过滤很重要,但如果结果包含特定的其他参数,则排除结果。有一些相关的表,许多列表框是过滤器的一部分,并且 sql 字符串是根据用户选择的 if 和内容动态生成的。
【问题讨论】:
-
如果这不是 MS-Access,我建议使用“Except”集合运算符...所以 Access 等效项是...stackoverflow.com/questions/15980525/…