1

postgres で次のクエリを完了するのに助けが必要です。

たとえば、次の表があります:(これは、私が達成しようとしているものの本質です)

それを呼び出しましょう - table_user_flags

user_id flag
1        1
1        2
2        1
2        3
3        1
3        2
3        3

特定のフラグを持つレコードを持つすべてのユーザーを見つける必要があります (フラグ列の下で、各フラグを持つ少なくとも 1 つのレコード)

例: フラグ 1,3 (つまり、1 と 3) を持つレコードを持つすべてのユーザーは、(user_id 2,3) に応答します (ただし、フラグ 1,2,3,4 を要求できるように、拡張を簡単にしたいと考えています。 5等)

私は多くのことを試しましたが、残念ながら、グーグルで答えを見つけるのに十分なほど状況を明確にすることができませんでした.

私の最善の推測(これは不十分で、おそらく欠陥があります)は(および提供されたフラグ配列-$flag_arr)です

select a.user_id
from table_user_flags a, table_user_flags b
where a.flag = $flag_arr[0] and b.flag = $flag_arr[1] and a.user_id=b.user_id

しかし、この戦略は遅く、2 つのフラグが必要な場合にのみ機能します。3 つ以上のフラグが必要な場合は、flags_arr の長さごとに特定のクエリを記述する必要があります。

どうすればこれを解決できますか?

どんな助けにも感謝します!

4

2 に答える 2