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

左結合横方向および配列集合体

    @Denisがすでにコメントしているように:LATERALは必要ありません また、サブクエリが間違った列を選択しました。これは機能します:

    SELECT t1.t1_id, t1.t1_data, t2_ids
    FROM   t1
    LEFT   JOIN (
        SELECT t1_id, array_agg(t2_id) AS t2_ids
        FROM   t1_t2_rel
        GROUP  BY 1
        ) sub USING (t1_id);
    

    -SQLフィドル。

    パフォーマンスとテスト

    あなたが言及する後続のシーケンシャルスキャンに関して:テーブル全体をクエリする場合、シーケンシャルスキャンは多くの場合高速 。実行しているバージョン、ハードウェア、カーディナリティの設定と統計、およびデータの配布によって異なります。選択的なWHEREを試してみてください WHERE t1.t1_id < 1000のような句 またはWHERE t1.t1_id = 1000 プランナー設定と組み合わせます 選択肢について学ぶために:

    SET enable_seqscan = off;
    SET enable_indexscan = off;
    

    リセットするには:

    RESET enable_seqscan;
    RESET enable_indexscan;
    

    あなたのローカルセッションでのみ、気に留めてください! dba.SEに関するこの関連する回答 詳細な手順があります。
    もちろん、設定もオフになっている可能性があります:




    1. HerokuはDjangoのモデルを移行しません

    2. 入力値がnullでない場合は列を更新し、そうでない場合は列の既存の値を無視してデータベースに保持します

    3. Oracle DBで4バイトのUTF-8文字を含む行を選択するにはどうすればよいですか?

    4. 多くのselect@@session.tx_read_onlyを取得しますが、同じことをしますか?