1

私はPostgreSQLが初めてです。現在、サードパーティの PostgreSQL データベースで作業していますが、読み取り権限が制限されているため、一時テーブルを作成したり、「ユーザー定義」変数を作成したりできません。さらに、MySQL よりも Postgres の方が正規表現の扱いが難しいことがわかりました。

質問:
次のダミー テーブルがあります。

Code   |  Name
11199  |  a
22299  |  b
33399  |  c
44499  |  a
55599  |  c

これで、数値のオフライン リスト (この DB でテーブルを作成/変更できません) ができました。コードがこれらの数字で始まる名前を選択する必要がありますが、戻りコードはクエリ ステートメント内のコードである必要があります。

数字のリストの例:

1
2
3
4
5

望ましいクエリ結果:

code  |   name
1     |   a
2     |   b
3     |   c
4     |   a
5     |   c

より多くのdb権限があればそれを達成する方法を考えることができます(データベース内のテーブルにリストを挿入する、さらにmysqlのように正規表現を使用できる場合は一時テーブルを使用するなど)が、どこで行うべきかわかりませんこれでPostgresを始めます。ヘルプ?:)

4

2 に答える 2

0

仮定を再検討してください。正規表現は、Postgres の基本的な標準機能です。regex を使用する組み込み関数も多数あります。

ただし、ここでは正規表現は必要ありません。標準 SQLLIKE演算子を使用します。dba.SE に関するこの関連する回答の Postgres でのパターン マッチングの概要:

リストを配列として提供し、unnest() Roman で示されているように、またはVALUESを使用してアドホック テーブルで直接提供できます。また、複数の行が一致する可能性があり、リスト内の数値ごとに 1 つの結果のみが必要であると想定しています。

SELECT n.nr, array_agg(t.name) AS names
FROM  (VALUES (1), (2), (3), (4), (5)) n(nr)
JOIN   tbl t ON t.code LIKE (n.nr || '%')
GROUP  BY 1

大規模リスト向けの高度なソリューション

数値 (および必要な特権!) を保持する (大きな) ファイルがある場合は、次のようなより高度な手法を利用できます。

  • COPY一時テーブルへ
  • pg_read_file()(特別な目的のために、スーパーユーザー権限が必要です)
  • ファイルの外部データ ラッパー ( file_fdw)

関連する回答と詳細:
トリガー内のテキスト ファイルからデータを読み取る

Depesz によるブログの外部データ ラッパーの例。

于 2013-10-20T22:11:44.207 に答える