0

我有一个具有以下结构和值的表:

location_id, location_name, parent_id

1,           USA,           0
2,           Illinois,      1
3,           Chicago,       2
4,           New York,      1

在这个片段中,row with'USA'将被视为一个国家,因为值为parent_id0。但是,如果parent_id有其他值,则表示特定位置在某个位置之下。我们有多个级别的位置,它没有设置。可以是2级、3级、4级等。

例如。美国 > 阿拉巴马州 > 阿拉巴马州墨西哥湾沿岸 > 墨西哥湾沿岸

我需要获取所有location_id没有进一步位置的条目。所以在上面的例子中,我应该得到“海湾海岸”的答案。

我认为解决方案应该是这样的:

SELECT location_id FROM location WHERE "( parent_id does not contain any value from location_id )"

但我无法弄清楚确切的语法。我应该如何实现这个?

4

2 回答 2

2

如果您使用Closure Tables来实现这一点(如“SQL Antipatterns”一书中推荐的那样),也许您会更好。

于 2012-05-16T19:13:27.980 回答
1
    select location_id from location l 
    where not exists 
    (select null 
     from location 
     where parent_id = l.location_id);
于 2012-05-16T19:10:57.200 回答