Postgres は、結合テーブルの array_agg に対して [] ではなく [null] を返します。
2023-09-20 08:14:19
質問
私はPostgresでいくつかのオブジェクトとそのタグを選択しています。スキーマはかなり単純で、3つのテーブルがあります。
オブジェクト
id
タグ付け
id | object_id | tag_id
タグ
id | tag
このようにテーブルを結合しているのは
array_agg
を使って、タグを一つのフィールドに集約しています。
SELECT objects.*,
array_agg(tags.tag) AS tags,
FROM objects
LEFT JOIN taggings ON objects.id = taggings.object_id
LEFT JOIN tags ON tags.id = taggings.tag_id
しかし、オブジェクトにタグがない場合、Postgresはこれを返します。
[ null ]
は空の配列ではなく タグがないときに空の配列を返すにはどうしたらよいですか? nullタグが返されていないことを再確認しました。
の
アグリゲートドキュメント
には、"coalesce関数は、必要に応じてゼロまたは空の配列をnullに置き換えるために使用することができます"と書かれています。試しに
COALESCE(ARRAY_AGG(tags.tag)) as tags
を試してみましたが、やはりnullの入った配列が返されます。第2パラメータを多数のものにしてみました(例えば
COALESCE(ARRAY_AGG(tags.tag), ARRAY())
など)にしてみましたが、すべてシンタックスエラーになります。
どのように解決するのですか?
9.4 以降、集計関数の呼び出しを制限して、特定の基準に一致する行のみを処理させることができます。
array_agg(tags.tag) filter (where tags.tag is not null)
関連
-
PostgresqlのデータベーステーブルのデータをExcel形式にエクスポートする方法(推奨)
-
PostgreSQLはバッチ実行のためにSQLをファイルに実装しています。
-
[解決済み] PostgreSQLの "DESCRIBE TABLE"
-
[解決済み] エラーが発生しました。pgsqlをrailsで動作させようとすると、Peer authentication failed for user "postgres" と表示されます。
-
[解決済み] 'ユーザー "postgres" のパスワード認証に失敗しました'
-
[解決済み] PostgresでInsert文のUUIDを生成する?
-
[解決済み] PostgreSQL で "use database_name" コマンドを使用する。
-
[解決済み] Postgres でサブクエリを使用してテーブルの行を更新する
-
[解決済み】psql: FATAL: ユーザー "postgres" の Ident 認証に失敗しました。
-
[解決済み] Postgresの場合。1つのカラムだけ区別される
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
単語をソートするカスタム関数とそれをPostgreSQLで使用する(実装コード)
-
Postgresqlへのリモートアクセスの設定方法(ファイアウォールの設定またはOFFが必要です。)
-
どのように定期的にLinux上でpostgresqlのデータベースをバックアップする
-
Postgresqlのデータベース権限まとめ
-
[解決済み] 未知語からテキストへの変換関数の検索に失敗しました。
-
[解決済み] PostgreSQL 自動インクリメント
-
[解決済み] psql'に非対話的にパスワードを指定するには?
-
[解決済み] psqlの代替出力フォーマット
-
[解決済み] PostgreSQLでカラムが存在しない場合、どのように追加しますか?
-
[解決済み] Postgresデータベースのエンコーディングの取得