sql >> データベース >  >> RDS >> PostgreSQL

PostgreSQLのjson配列から一意の番号を持つ要素を取得するにはどうすればよいですか?

    JOIN LATERALを使用して、別のクリーンなアプローチを試してください :

    select b.id, t.rn
         , t.account->>'name' AS name
         , t.account->>'balance' AS balance
    FROM   bank_accounts b
    LEFT   JOIN LATERAL jsonb_array_elements(b.bank_accounts)
                        WITH ORDINALITY AS t (account, rn) ON true;
    

    bank_accountsの値が空またはnullの行を気にしない場合 、より単純なCROSS JOINを使用します :

    select b.id, t.rn
         , t.account->>'name' AS name
         , t.account->>'balance' AS balance
    FROM   bank_accounts b
         , jsonb_array_elements(b.bank_accounts) WITH ORDINALITY AS t (account, rn);
    

    問題の重要な要素は、WITH ORDINALITYです。 これは、セットを返す関数のためにその場で行番号を生成します。これはPostgres9.4で導入されました-あなたのために働きます、jsonb 9.4でも導入されました。

    これらは、基になる行ごとに一意です。テーブル全体で一意にするには、idを追加します 基になるテーブルの。

    WITH ORDINALITYの詳細 :

    関連:




    1. Onchangeドロップダウン値はそれぞれをクエリします。テーブル-php、mysql、ajax、jqueryを使用

    2. PythonMySQLの間違ったアーキテクチャエラー

    3. Pandas から SQL に DataFrame をロードして ORACLE を取得し、エラー - ORA-00911:無効な文字

    4. 検索のようにmysqlにスペースを含める