如何使用NOT EXISTS仅返回另一个查询(Access 2013)中不存在的行

时间:2019-07-17 21:59:45

标签: sql ms-access

我无法使该查询正常工作。我试图返回表中没有特定关系的每一行。

m_someObject

这些表创建一个层次结构,其中[from]是父ID,[to]是子ID。

group_id   |   group_name
--------------------------
    1            group1
    2            group2
    3            group3
    4            group4
    5            group5

relationship_id    |    from    |    to    |     type
-----------------------------------------------------
    1                    1            2       Subgroup
    3                    1            5       Subgroup
    4                    2            3       Subgroup
    5                    4            2       Subgroup

我想选择不是另一个组的子组的每个组。基本上,我想选择仅顶级组,即没有父级的所有组。这是所有ID不在[TO]

下的组

我首先通过查询找到所有孩子。该查询可以正常工作。

--group1
   --group2
       --group3
   -- group5
--group4
   --group2

(该类型与其他无关的东西有关)。

这将正确返回以下内容:

SELECT groups.*
FROM relationships INNER JOIN groups ON relationships.to = groups.ID
WHERE (((relationships.Type)="SubGroup"))

因此,我认为我可以使用group_id | group_name -------------------------- 2 group2 3 group3 5 group5 来获取我实际想要的行。

NOT EXISTS

但是,此操作不返回任何行。我使用SELECT groups.* FROM groups WHERE NOT EXISTS ( SELECT groups.* FROM relationships INNER JOIN groups ON relationships.to = groups.ID WHERE (((relationships.Type)="SubGroup")) ) 错了吗?

1 个答案:

答案 0 :(得分:1)

您要查找的是组,而组ID在您的关系表的“至”列中不存在。 试试这个:

SELECT groups.* 
FROM groups
WHERE NOT EXISTS 
(
 SELECT 1
 FROM relationships 
 WHERE groups.group_id = relationships.to
)