具有父/子层次结构的简单SQL语句

时间:2014-04-03 15:24:38

标签: sql postgresql

因为我需要编写SQL语句已经有一段时间了(我甚至不知道是否有足够的知识来发表这种说法。)

所以,这是交易。表有两列。一个是父ID,另一个是子Id。

parent_id | child_id
        4 |        2
        2 |        5

这仅用于保存复合父/子层次结构。

4,2行意味着id为4的结构将结构id 2称为子。 2,5意味着具有id 2的结构指的是具有id 5作为孩子的结构。 等等。

这是我需要做的: 我需要提取所有未被任何结构作为子结构引用的结构(根结构)。 什么SQL(最好是postgres)语句才能实现呢?

3 个答案:

答案 0 :(得分:2)

查找不属于另一个结构的子结构的所有结构:

select  *
from    YourTable
where   Parent_Id not in (Select child_id from ...)

答案 1 :(得分:1)

假设没有祖父母,曾祖父母关系的余地,我建议在这种情况下使用Left-JOIN。以下内容:

Select * from Table
LEFt join Table on Parent_id=child_id
WHERE  child_id is null

答案 2 :(得分:1)

   SELECT *
   FROM structures
   WHERE id not in ( SELECT child_id FROM Table ) AS dummy