PostgreSQLの2つのテーブル (users, groups)
select id, name from users; <-usersテーブル select id, name, user_ids from groups; <- groupsテーブル(groupsのuser_ids はusersテーブルのid が入っているarray)
あるgroups のuser_ids に入っているデータをusers から抜き出す。
方法 1
select * from users where (select user_ids from groups where id='89') @> array[id];users.id を配列にして、サブクエリの配列と比較。@>
方法 2
select * from users where id = any(select unnest(user_ids) from groups where id='89');サブクエリの結果をunnest で集合にして、users.id と比較。 any の代わりに in でもOK
検索したら、この2つ方法がでてきたけど、以前どうやって扱っていたのか全く思い出せない...
こんなSQL書いてたかな? (;´∀`)
気がつけばPostgres のバージョンも12,13と上がってる。
参考
- postgresql: any on subquery returning array
- Use an array returned from a subquery as argument in WHERE clause with ANY function in outer query
- 9.18. Array Functions and Operators