2

私は次のクエリを持っています:

SELECT title_id, title, array_agg(g.name)
FROM title t
INNER JOIN title_genre tg USING(title_id)
INNER JOIN genre g USING (genre_id)
GROUP BY title_id, title
ORDER BY title_id
LIMIT 10

このクエリからの出力例:

5527; "The Burbs"; "{Suspense、" Dark Humor&Black Comedies "、Comedy、" Cult Comedies "}"
5528; "20,000 Leagues Under the Sea"; "{" Family Adventures "、" Children&Family "、" Ages 5-7 "、" Book Characters "、" Family Animation "}"
5529; "2001:A Space Odyssey"; "{" Classic Sc​​i-Fi&Fantasy "、" Sci-Fi Thrillers "、Classics}"
5530; "2010:私たちが連絡をとる年"; "{"サイエンスフィクションドラマ"、"エイリアンSF "、"サイエンスフィクションとファンタジー "、"現代文学に基づくドラマ "、"サイコスリラー "、"本に基づくドラマ"}"
5531;"三十九夜";"{"本に基づくドラマ"、"イギリス "、スリラー、"スパイスリラー "、"古典文学に基づくドラマ "、サスペンス}"
5532; "4D Man"; "{" Classic Sc​​i-Fi&Fantasy "、" Sci-Fi&Fantasy "、" Sci-Fi Horror "}"
5533; "8 Seconds"; "{Drama、" Romantic Dramas "、Biographies、" Indie Dramas "、" Sports Dramas "、" Miscellaneous Sports "、" Sports Stories "、" Other Sports "}"
5534; "9 1/2 Weeks"; "{" Steamy Romance "、Romance、" Romantic Dramas "}"
5535;"昨夜について...";"{"ロマンチックドラマ"、"ロマンチックコメディ"、ロマンス}"
5536; "Above the Law"; "{" Action&Adventure "、" Action Thrillers "、" Martial Arts "}"

(1)array_agg関数の周りにNHibernate基準を作成するにはどうすればよいですか?これに対応するために、PostgreSQLダイアレクトを何らかの方法で拡張する必要がありますか?

(2)統合テストデータベースとしてSQLiteを使用し、テスト/製品データベースとしてPostgreSQLを使用しています。SQLiteにはarray_agg関数はありませんが、同様のことを行うgroup_concat関数があります。テストでSQLiteを使用し、test / prodでPostgreSQLを使用できるように設定することは可能ですか?

(3)array_aggは、データを配列として返します。NHibernateを拡張してPostgreSQL配列を処理する方法を説明する素晴らしい記事をnhibernate.infoで見つけました。これを基準に含めるにはどうすればよいですか?たとえば、ロマンチックなドラマではないドラマのジャンルのタイトルを見つけたいとします。

助けてくれてありがとう!

4

1 に答える 1

1

(1)array_agg関数の周りにNHibernate基準を作成するにはどうすればよいですか?これに対応するために、PostgreSQLダイアレクトを何らかの方法で拡張する必要がありますか?

私はあなたがすべきではないと思います。ジャンル別にすべてのタイトルを選択したい場合は、ジャンルをID番号に解決するWHERE句が必要です。1つの理由として、varchar列の副選択はインデックスを使用できます。別の理由で、私はそれをこのようにすることによって、あなたの質問#3がちょうど消えると確信しています。

SELECT title_id, title, array_agg(g.genre)
FROM title t
INNER JOIN title_genre tg USING(title_id)
INNER JOIN genre g USING (genre_id)
WHERE tg.title_id in (SELECT title_id 
                      FROM title_genre 
                      INNER JOIN genre ON genre.genre_id = title_genre.genre_id 
                                      AND genre.genre = 'Suspense'
                      )
GROUP BY title_id, title
ORDER BY title_id
LIMIT 10

同じサブクエリで内部結合を使用して作成することもできます。

SELECT t.title_id, t.title, array_agg(g.genre)
FROM title t
INNER JOIN title_genre tg USING(title_id)
INNER JOIN genre g USING (genre_id)
INNER JOIN (SELECT title_id 
            FROM title_genre 
            INNER JOIN genre ON genre.genre_id = title_genre.genre_id 
                            AND genre.genre = 'Suspense'
            ) gn
            ON gn.title_id = tg.title_id
GROUP BY t.title_id, t.title
ORDER BY t.title_id
LIMIT 10

(2)テストでSQLiteを使用し、test / prodでPostgreSQLを使用できるように設定することはできますか?

本番環境で使用するのと同じプラットフォームを開発で使用することは可能であり、推奨されます。PostgreSQLをインストールし、SQLiteの代わりに使用します。

于 2011-04-15T05:54:26.860 に答える