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

複雑なクエリで2つのテーブルを結合する(均一なデータではない)

    SELECT DISTINCT ON (1)
           t.id, d.address, d.id
    FROM   data_table t
    JOIN   dictionary d ON replace(d.address, ' ', '')
                     LIKE (replace(t.address, ' ', '') || '%')
    ORDER  BY t.id, d.address, d.id
    

    ORDER BY 質問の更新後に更新されました。)ORDER BYなし 任意の一致を選択しています。
    この関連する回答の手法の説明:
    各GROUP BYグループの最初の行を選択しますか?

    辞書の機能インデックスを使用すると、これが高速になります。 :

    CREATE INDEX dictionary_address_text_pattern_ops_idx
    ON dictionary (replace(address, ' ', '') text_pattern_ops);
    

    前の質問 に提供した回答でその詳細を説明します 。

    それがあなたに「最良の」一致をもたらすかどうかについて議論するかもしれません。代替案の1つは、トリグラムインデックスとの類似性の一致です。最後の質問に追加した最初のリンクの詳細。



    1. Codeigniter Active Record-制限付きで見つかった行の総数をカウントする(MySQL)

    2. Oracleデータベースに自動インクリメントのGUID主キーを作成する方法はありますか?

    3. 致命的なエラー:functions.phpの25行目でsession_start()を再宣言できません

    4. データベース内のすべてのストアドプロシージャに対する実行権限をユーザーに付与しますか?