MS Server SQL case when 判断条件有关问题
MS Server SQL case when 判断条件问题
开发项目中遇到这样一个问题求大神解答
简单环境是这样的:存在 三个表 表A,表B 和user表
其中表B中的一个字段 userId 是外键 对应 user表的主键ID
变更前我是这样写的:
select *,'ShowStatus' =
CASE
WHEN @id in ( select userId from 表B) THEN 'Todo'
END
from 表A
参数@id是当前用户在表user中的ID值以“admin”为例)
使用 in 可以判断 表B 中userId 是否存在 参数@id值 ,
更改:
表B的 userId 变更为userIds ,删除外键,可以存取多个 user表的值 用逗号分隔 ,如存储值为“admin,userA”
问现在如何判断 表B中的userIds 列的字符串值中是否存在 参数 “admin”?
哪位朋友给个sql的解决办法。
变更前

变更后

------解决方案--------------------
select *,'ShowStatus' =
CASE
WHEN EXISTS ( select userId from 表B WHERE userIds LIKE '%' + @id + '%' ) THEN 'Todo'
END
from 表A
------解决方案--------------------
最好使用 ','+@id+',' like '%,'+userids+',%'
------解决方案--------------------
可以看看查询计划 差不多的。反正都是模糊查询 两边加%%
开发项目中遇到这样一个问题求大神解答
简单环境是这样的:存在 三个表 表A,表B 和user表
其中表B中的一个字段 userId 是外键 对应 user表的主键ID
变更前我是这样写的:
select *,'ShowStatus' =
CASE
WHEN @id in ( select userId from 表B) THEN 'Todo'
END
from 表A
参数@id是当前用户在表user中的ID值以“admin”为例)
使用 in 可以判断 表B 中userId 是否存在 参数@id值 ,
更改:
表B的 userId 变更为userIds ,删除外键,可以存取多个 user表的值 用逗号分隔 ,如存储值为“admin,userA”
问现在如何判断 表B中的userIds 列的字符串值中是否存在 参数 “admin”?
哪位朋友给个sql的解决办法。
变更前
变更后
------解决方案--------------------
select *,'ShowStatus' =
CASE
WHEN EXISTS ( select userId from 表B WHERE userIds LIKE '%' + @id + '%' ) THEN 'Todo'
END
from 表A
------解决方案--------------------
最好使用 ','+@id+',' like '%,'+userids+',%'
------解决方案--------------------
select *,'ShowStatus' =
CASE
WHEN EXISTS ( select userId from 表B WHERE userIds LIKE '%' + @id + '%' ) THEN 'Todo'
END
from 表A
谢谢提醒
我在这个基础上没有使用like 选择的charindex
避免‘admin’和‘administrator’的类似查询
最好使用 ','+@id+',' like '%,'+userids+',%'
可以看看查询计划 差不多的。反正都是模糊查询 两边加%%