下面是我的存储过程。我从多个表中获取详细信息。
ALTER PROCEDURE [dbo].[proc_getCoachList]
@skills varchar(MAX), -------- example // '["Life", "Sports"]'
@keyword varchar(MAX) -------- example // "developer"
AS
BEGIN
(select SkillTitle from ValidSkills)
END
BEGIN
SELECT DISTINCT users.*,
profiles.Details,
profiles.Experiance,
profiles.HoursCompleated,
profiles.RatePerHour,
profiles.SubTitle,
profiles.TotalEarning,
UserSkils.UserSkills
FROM Users users
LEFT JOIN profile profiles ON users.UserID =
profiles.UserID
LEFT JOIN
(
SELECT DISTINCT ts2.UserId,
(
SELECT ts.SkillDescription + ',' AS [text()]
FROM Skills ts
WHERE ts.UserId = ts2.UserId
ORDER BY ts.UserId
FOR XML PATH ('')
) AS UserSkills
FROM Skills ts2
) UserSkils ON users.UserID = UserSkils.UserId
我的过滤器从这里开始---------
WHERE EXISTS (
SELECT 1
FROM OPENJSON(@skills, '$') AS j
WHERE UserSkils.UserSkills LIKE '%' + j.value + '%'
) OR
users.UserName LIKE '%' + @keyword + '%'
END
在这里我的过滤器无法正常工作。过滤器基于多种技能和关键字。请让我知道where子句中的最佳方法和正确过滤器。 特殊情况是@skills为空时,则它也不根据关键字起作用。
答案 0 :(得分:0)
LIKE
是一个棘手的函数。查询表字段(j.value
)应该在LIKE指令的数据侧(左侧),而不是在匹配侧(右侧)。也许您可以尝试使用
WHERE CHARINDEX(j.value,UserSkils.UserSkills)