3

したがって、現時点ではテーブルに 2 つの列があり、そのうちの 1 つは JSON ドキュメントを含んでいます。

        CID:
        2
        Name:
        {"first" : "bob","1" : "william", "2" : "archebuster", "last" : "smith"}    

次を使用してこの列を検索すると、

  SELECT "CID", "Name"->>(json_object_keys("Name")) AS name FROM "Clients" WHERE 
  "Name"->>'first' LIKE 'bob' GROUP BY "CID";

私は得る:

  CID | name
--------------
  2   | bob
  2   | william
  2   | archebuster
  2   | smith

本当に欲しいとき:

 CID | name
  2  | bob william archebuster smith

どうすればこれを行うことができますか?私はpostgresqlのJSONが初めてです。私はstring_aggを試しましたが、おそらくjson列で作業しているため、「->>」は結果を文字列に設定する必要があるにもかかわらず、機能しませんでした

アップデート:

ここに画像の説明を入力

4

1 に答える 1

4

まず、セットを返す関数を句に含めるSELECTと、暗黙的な が作成されることを理解する必要があります。LATERAL CROSS JOIN

実際のクエリは次のようになります。

SELECT "CID", "Name"->>"key" AS name
FROM "Clients"
CROSS JOIN LATERAL json_object_keys("Name") AS "foo"("key")
WHERE "Name"->>'first' LIKE 'bob'
GROUP BY "CID", "Name"->>"key"

本当にそうしたい場合は、ここで集計関数を適用できます (おそらくarray_aggまたはstring_agg)。

SQLFiddle

于 2014-05-23T08:12:03.897 に答える