1. ホーム
  2. postgresql

[解決済み] Postgres: 配列フィールドに値が含まれているかどうかをチェックしますか?

2022-04-28 11:04:26

質問

どこかに答えがあるという意味では重複質問なのでしょうが、10分ほどググっても答えが見つからなかったので、他の人の役に立つかもしれないという理由で、編集者に閉じないよう訴えます。

Postgres 9.5を使用しています。これは私のテーブルです。

        Column          │           Type            │                                Modifiers
─────────────────────────┼───────────────────────────┼─────────────────────────────────────────────────────────────────────────
 id                      │ integer                   │ not null default nextval('mytable_id_seq'::regclass)
 pmid                    │ character varying(200)    │
 pub_types               │ character varying(2000)[] │ not null

の中にある "Journal"を含むすべての行を見つけたいのですが、どうすればよいでしょうか。 pub_types .

ドキュメントを見つけたり、ググったりして試した結果、こんな感じです。

select * from mytable where ("Journal") IN pub_types;
select * from mytable where "Journal" IN pub_types;
select * from mytable where pub_types=ANY("Journal");
select * from mytable where pub_types IN ("Journal");
select * from mytable where where pub_types contains "Journal";

スキャンしてみました postgresの配列のドキュメント StackOverflowの質問はすべて、より複雑な例に基づいているようです。

どのように解決するのですか?

これでうまくいくはずです。

select * from mytable where 'Journal'=ANY(pub_types);

すなわち、構文は <value> = ANY ( <array> ) . また、postresqlの文字列リテラルはシングルクォートで記述されることに注意してください。