現在、user_type 列を持つテーブルがあり、ユーザーがその user_type に一致する場合にのみ行を表示します。データを複製したり、別のテーブルを作成したりせずに、複数の user_types を設定できるようにしたいと考えています。列を int から varchar に変換して、ユーザー タイプ ID のコンマ区切りのリストにすることができると考えました。
これまでのところ、うまく機能しています。それは、ユーザーに表示する必要があるかどうかを確認するときにそれを具体的に使用できるため、事前に user_type が何であるかを知っている限りです。
SELECT *
FROM perm
WHERE user_type='50'
OR user_type LIKE '50,%'
OR user_type LIKE '%,50,%'
OR user_type LIKE '%,50'
値でテーブルを結合しようとすると、問題が発生します。私が使ってみたときIN
:
SELECT p.*
FROM perm p
JOIN [user] u ON u.type IN (p.user_type)
私はエラーを受け取ります:それで、私は上記で使用していた方法Conversion failed when converting the varchar value '50,40,30' to data type int.
に戻ることにしました:LIKE
SELECT p.*
FROM perm p
JOIN [user] u ON (
u.type LIKE p.user_type
OR u.type LIKE (p.user_type + ',%')
OR u.type LIKE ('%,' + p.user_type + ',%')
OR u.type LIKE ('%,' + p.user_type)
)
これは、1 つのユーザー タイプ値のみを持つ結果のみを返します。IN
コマンドで使用するカンマ区切りのリストを変換する方法はありますか? または、動的なLIKE
引数を作成する方法はありますか?