sql - MS Access:根据另一个表字段的多条记录从一个表中选择记录
问题描述
我的问题是:如何根据另一个表的多个具有特定字段值的记录来选择 1 个表的记录?
所以我有 2 个表,都有 3 个字段。需要注意的是,[suti].[id] === [tartalom].[sutiid]。
我的工作是选择在 [tartalom].[mentes] 中同时具有“G”和“To”的所有 [suti].[nev] 和 [suti].[tipus]。但是,“G”和“To”记录在不同的记录中,这就是我对此有疑问的原因。
在我在下面写的这个例子中,应该选择的唯一记录是Something2 || 玉米饼。
这是如何实现的?提前谢谢你的帮助 :)
在任何人说之前,不是我做这个数据结构。这就是我所拥有的,无法改变。
表一:须提
编号 || 新 || 提普斯
1 || 东西1 || 玉米饼
2 || 东西2 || 玉米饼
3 || 东西3 || 可怜的
表 2:他他仑
编号 || 苏蒂德 || 精神状态
1 || 1 || L
2 || 1 || 至
3 || 2 || G
4 || 2 || 至
5 || 3 || G
解决方案
以下都是标准SQL。
简单聚合找到对应的id:
SELECT sutiid
FROM tartalom WHERE mentes IN ('G', 'To')
GROUP BY sutiid
HAVING COUNT(DISTINCT mentes) = 2
;
现在只需将其与第一个表连接(不一定是连接)即可获得该行或多行。
SELECT *
FROM suti
WHERE id IN (
SELECT sutiid
FROM tartalom
WHERE mentes IN ('G', 'To')
GROUP BY sutiid
HAVING COUNT(DISTINCT mentes) = 2
)
;
Access 不支持COUNT(DISTINCT x)
,但应该处理,这也是标准 SQL:
SELECT *
FROM suti
WHERE id IN (
SELECT sutiid
FROM (
SELECT DISTINCT sutiid AS sutiid, mentes
FROM tartalom
WHERE mentes IN ('G', 'To')
) xxx
GROUP BY sutiid
HAVING COUNT(*) = 2
)
;
推荐阅读
- sql - BigQuery SQL - 将1列中的多行与另一个表中的行相匹配?
- reactjs - 如何更改 NextJS 根路径页面
- python - 硒没有加载页面
- oracle-apex - 识别页面调用模态页面
- c - 如何在 FFmpeg 代码 (C) 中设置帧速率/FPS?
- reactjs - 浏览器未在 React 应用程序中维护正确的历史记录
- android - 我希望 Camera.main 跟随播放器,它在编辑器中运行良好,但在 Android Deice 上却不行
- flutter - 使用不包含 MediaQuery 的上下文调用 MediaQuery.of()。(紧急援助)
- sql - 使用带有组合框的 Vb.net 显示数据库中的数据
- web-services - Web 框架会在读取正文之前检查授权标头吗?