2016-04-13 14 views
1

以下のように1回のクエリで結果リストのデータを取得するために左結合を2回または他の方法で行う方法はありますか?左の結合を1回のクエリで2回行う方法は?

私は

var dbQuery = `SELECT 
    gm.*, 
    row_to_json(m.*) as media, 
    row_to_json(mi.*) as media_information 
    FROM "gallery_media" gm 
    LEFT JOIN media m ON gm.media_id = m.id 
    LEFT JOIN media_information mi ON gm.media_id = mi.media_id 
    WHERE "gallery_id" = $1 
    ORDER BY gm.create_date DESC OFFSET $2 LIMIT $3`; 

結果

{ 
    id: 9, 
    gallery_id: 25, 
    media_id: 9, 
    media: { 
    id: 9, 
    }, 
    media_information: { 
    id: 9, 
    media_id: 9, 
    } 
} 

UPDATE

を試してみましたmedia_information

{ 
    id: 9, 
    gallery_id: 25, 
    media_id: 9, 
    media: { 
    id: 9, 
    media_information: { 
     id: 9, 
     media_id: 9, 
    } 
    }, 
} 

media下のクエリは私もCを試したいですハンゲ ON m.id = mi.media_id何も変更

var dbQuery = `SELECT 
    gm.*, 
    row_to_json(m.*) as media, 
    row_to_json(mi.*) as media_information 
    FROM "gallery_media" gm 
    LEFT JOIN media m ON gm.media_id = m.id 
    LEFT JOIN media_information mi ON m.id = mi.media_id 
    WHERE "gallery_id" = $1 
    ORDER BY gm.create_date DESC OFFSET $2 LIMIT $3`; 

テーブル

CREATE TABLE IF NOT EXISTS "gallery_media"(
    "id" SERIAL NOT NULL, 
    "gallery_id" integer NOT NULL, 
    "media_id" integer NOT NULL, 
    PRIMARY KEY ("id") 
); 
CREATE TABLE IF NOT EXISTS "media"(
    "id" SERIAL NOT NULL, 
    PRIMARY KEY ("id") 
); 

CREATE TABLE IF NOT EXISTS "media_information"(
    "id" SERIAL NOT NULL, 
    "media_id" integer NOT NULL, 
    PRIMARY KEY ("id") ); 

http://sqlfiddle.com/#!15/ff805

+0

私は1つのクエリで行う方法を知りたいですか?今度はquery left join 'media'を' gallery_media'に分けてから 'media_information' user' media_id'を選択します。 – user1575921

+0

2番目の 'left join'が最初の' left join'のテーブルに結合するようにクエリを変更するだけです。 –

+0

@ dan1111どのようにですか?私はそれを得ることができません..あなたが私の例を示すことができます – user1575921

答えて

0

を引き起こす私は、これはあなたが後にしているものだと思う:

var dbQuery = `SELECT          
    gm.*,             
    row_to_json(m.*) as media,        
    row_to_json(mi.*) as media_information     
    FROM "gallery_media" gm         
    LEFT JOIN media m ON gm.media_id = m.id     
    LEFT JOIN media_information mi ON m.id = mi.media_id 
    WHERE "gallery_id" = $1         
    ORDER BY gm.create_date DESC OFFSET $2 LIMIT $3`;  

すなわち:上の2番目のLEFT JOINをやっての代わりに

+0

返事ありがとう、私は前にこれを試しましたが、同じ結果が得られました。何も変わりません。 – user1575921

+0

@ user1575921その後、私はあなたの構造とデータのSQL Fiddleを投稿して、 –

+0

問題が更新されました – user1575921

関連する問題