0

次の構造と値を持つテーブルがあります。

location_id, location_name, parent_id

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

このフラグメントでは、の値が 0'USA'であるため、 の行は国と見なされます。ただし、他の値がある場合は、特定の場所がある場所の下にあることを意味します。複数のレベルの場所があり、設定されていません。2 レベル、3 レベル、4 レベルなどがあります。parent_idparent_id

たとえば。アメリカ合衆国 > アラバマ州 > アラバマ湾岸 > ガルフ ショアーズ

すべてのlocation_idエントリを取得する必要がありますが、それ以上の場所はありません。上記の例では、「Gulf Shores」という回答が得られるはずです。

解決策は次のようにする必要があると思います:

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 に答える