无法在带有Join的Sql上应用过滤器

问题描述 投票:0回答:1

下面是我的存储过程。我从多个表中获取详细信息。

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为空时它的工作也不依赖于关键字。

sql sql-server
1个回答
0
投票

LIKE是一个棘手的功能。查询表字段(j.value)应位于LIKE指令的数据侧(左侧),而不是位于匹配侧(右侧)。也许你可以尝试使用

WHERE CHARINDEX(j.value,UserSkils.UserSkills)
© www.soinside.com 2019 - 2024. All rights reserved.