目前我有一个表,它有一个 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)
)
这仅返回仅具有一种用户类型值的结果。有没有办法将逗号分隔的列表转换为与IN
命令一起使用?或者有什么方法可以进行动态LIKE
论证?