1

ID とテキストをjsonb含む要素の配列( ) があります。jsonb[]私が使用できる要素を削除するには:

UPDATE "Users" SET chats = array_remove(chats, '{"id": 2, "text": "my message"')

しかし、IDだけでメッセージを削除したいのですが、メッセージを取得すると別のクエリが必要になります。

4

1 に答える 1

4

情報が不足していると仮定します。

  • テーブルには という PK がありuser_idます。
  • id = 2テーブル全体ですべての要素を削除したいとします。
  • 他の行に触れたくありません。
  • idの各配列内で一意ですchats

UPDATE "Users" u
SET    chats = array_remove(u.chats, d.chat)
FROM  (
   SELECT user_id, chat
   FROM   "Users", unnest(chats) chat
   WHERE  chat->>'id' = '2'
   ) d
WHERE  d.user_id = u.user_id;

次の説明は、質問で提供された情報の範囲と一致します。

于 2015-05-03T04:07:46.143 に答える