Sql 如何使用not EXISTS仅返回其他查询(Access 2013)中不存在的行
我无法让这个查询工作。我试图返回表中没有特定关系的每一行Sql 如何使用not EXISTS仅返回其他查询(Access 2013)中不存在的行,sql,ms-access,Sql,Ms Access,我无法让这个查询工作。我试图返回表中没有特定关系的每一行 group_id | group_name -------------------------- 1 group1 2 group2 3 group3 4 group4 5 group5 relationship_id | from | to |
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
这些表创建一个层次结构,其中[from]是父ID,[to]是子ID
--group1
--group2
--group3
-- group5
--group4
--group2
我要选择不是另一个组的子组的每个组。基本上,我只想选择顶级组,即没有父级的所有组。这是所有ID不在[TO]下的组
我开始查询以查找所有的孩子。此查询按预期工作
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"))
)
但是,这不会返回任何行。我是否使用了NOT EXISTS错误?您正在查找的是组,而groupID不存在于关系表的“to”列中。 试试这个:
SELECT groups.*
FROM groups
WHERE NOT EXISTS
(
SELECT 1
FROM relationships
WHERE groups.group_id = relationships.to
)
我使用了SELECT*FROM table WHERE fieldname NOT INSELECT fieldname FROM table WHERE某些条件;