2017-09-14 9 views
0

でリンク部分を持つ行を注文する方法列を持つID、タイトル、条件私はテーブルを持っているPostgreSQLの

と私はBテーブルからいくつかの行の位置に関する情報を別のテーブルを持っていますA.テーブルBにはカラムがあります。id、next_id、prev_id

テーブルBの情報に基づいてAから行をソートする方法はありますか?

例えば、 表A

id| title 
---+----- 
1 | title1 
2 | title2 
3 | title3 
4 | title4 
5 | title5 

表B

id| next_id | prev_id 
---+----- 
2 | 1  | null 
5 | 4  | 3 

私はこの結果を取得したい:

id| title 
---+----- 
2 | title2 
1 | title1 
3 | title3 
5 | title5 
4 | title4 

そして後には、この種の適用、私はソートしたいです条件桁はまだありません。 私はすでに解決策を探すのに多くの時間を費やしており、あなたの助けを願います。

答えて

0

データにウェイトを追加する必要があります。この例では、next_idを使用していますが、prev_idを使用する必要があるかどうかはわかりませんが、使用方法は説明していません。とにかく

は、ここでのコードの例です:

-- Temporal Data for the test: 
CREATE TEMP TABLE table_a(id integer,tittle text); 
CREATE TEMP TABLE table_b(id integer,next_id integer, prev_id integer); 
INSERT INTO table_a VALUES 
(1,'title1'), 
(2,'title2'), 
(3,'title3'), 
(4,'title4'), 
(5,'title5'); 
INSERT INTO table_b VALUES 
(2,1,null), 
(5,4,3); 

-- QUERY: 
SELECT 
    id,tittle, 
    CASE -- Adding weight 
     WHEN next_id IS NULL THEN (id + 0.1) 
     ELSE next_id 
    END AS orden 
FROM -- Joining tables 
    (SELECT ta.*,tb.next_id 
    FROM table_a ta 
    LEFT JOIN table_b tb 
    ON ta.id=tb.id)join_a_b 
ORDER BY orden 

そして、ここではその結果です:

id | tittle | orden 
-------------------------- 
2 | title2 |  1 
1 | title1 | 1.1 
3 | title3 | 3.1 
5 | title5 |  4 
4 | title4 | 4.1 
関連する問題