2

データベースに次のテーブルのようなテーブルがあると想像してください。このクエリの入力として使用する場所の一部であるすべての場所を返すクエリを作成するにはどうすればよいですか。

たとえば、次のように送信します。

(this is the input)   (I want this result)
1 (Europe)            France, Italy, Paris, PartA, PartAA
3 (France)            Paris, PartA, PartAA
4 (Paris)             PartA, PartAA

例の表のある写真

4

2 に答える 2

1

Martin Smithが提案したように、再帰CTEを調べましたが、これが私が思いついたものです。

with place_hierarchy (code, place, parent_code)
as (
    select p.code, p.place, p.parent_code
    from places p
    where p.code = :code
    union all
    select p.code, p.place, p.parent_code
    from places p
    inner join place_hierarchy ph on p.parent_code = ph.code
)
select ph.place
from place_hierarchy ph

ただし、完全にテストされていません。

于 2012-12-15T19:20:47.273 に答える
0

すべての場所を1行に集約してサブツリーを構築する再帰CTE。

with placesreq(code, place, parent, depth)
as
(
  select code, place, parentCode, 0 as depth
  from places
  where place = 'France'

  union all

  select p.code, p.place, p.parentCode, r.depth+1
  from places as p
    join placesreq as r  on r.code = p.parentCode
)
select place+',' as 'data()'
from placesreq
where depth > 0
for xml path('')

唯一の小さな問題は、リストの最後の場所の後のコンマです。クエリまたは後でコードでそれを取り除くことができます。

于 2012-12-15T20:24:22.727 に答える