2013-12-04 2 views
1

У меня есть таблица, которая представляет собой простой> ребенок родителей-иерархии, что-то вроде:Как объединить детей и родителей в один запрос?

   Table "public.transactions" 
    Column | Type   | Modifiers 
-----------+---------------+----------------------------------------------------------- 
id  | integer  | not null default nextval('transactions_id_seq'::regclass) 
parent_id | integer  | not null default 0 
amount | numeric(15,4) | not null default 0.0000 

я хотел, чтобы отобразить таблицу с дочерними сделок (те, с parent_id> 0), сгруппированных ниже своих родителей , например,

parent 
    child 
    child 
parent 
    child 
parent 
parent 

(примечание: вложенные пространства здесь только для визуального представления иерархии, они не нужны для результатов запроса)

Могу ли я сделать это в одном запросе? Я выполняю Postgresql 9.3, если это имеет значение.

+2

Такие вопросы должны предоставлять данные выборки, в идеале SQLfiddle. Также: что вы пробовали? –

+0

Все двигатели SQL работают с отношениями, которые можно рассматривать как табличные структуры. Вложенное представление, которое вы указали, не является табличным, поэтому запрос не может вернуть ничего похожего на это. Вы возвращаете что-то наподобие 'parent1 child1 \ n parent1 child2 \ n parent2 child1 ...' – voithos

+0

@voithos. Вложенность существует только для визуального представления иерархии, она не понадобится как часть запроса. –

ответ

2

Для одного уровня вложенности, это может показаться почти тривиальным:

SELECT * 
FROM transactions 
ORDER BY COALESCE(parent_id, id), id 
+1

Спасибо! http://sqlfiddle.com/#!15/d361f/2 –

Смежные вопросы