我无法使该查询正常工作。我试图返回表中没有特定关系的每一行。
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"))
)
错了吗?
答案 0 :(得分:1)
您要查找的是组,而组ID在您的关系表的“至”列中不存在。 试试这个:
SELECT groups.*
FROM groups
WHERE NOT EXISTS
(
SELECT 1
FROM relationships
WHERE groups.group_id = relationships.to
)