以下のように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
私は1つのクエリで行う方法を知りたいですか?今度はquery left join 'media'を' gallery_media'に分けてから 'media_information' user' media_id'を選択します。 – user1575921
2番目の 'left join'が最初の' left join'のテーブルに結合するようにクエリを変更するだけです。 –
@ dan1111どのようにですか?私はそれを得ることができません..あなたが私の例を示すことができます – user1575921