簡體   English   中英

無法通過聯接在SQL上應用過濾器

[英]Unable to apply the filters on the Sql with Join

以下是我的存儲過程。 我從多個表中獲取詳細信息。

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為空時,它也不根據關鍵字起作用。

LIKE是一項棘手的功能。 查詢表字段( j.value )應該在LIKE指令的數據側(左),而不是在匹配側(右)。 也許您可以嘗試使用

WHERE CHARINDEX(j.value,UserSkils.UserSkills)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM