首页 > 解决方案 > 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

标签: sqlcriteria

解决方案


以下都是标准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
     )
;

推荐阅读