[英]How to compare values with multiple values from another table in SQL using IN and LIKE operator?
我在一張表中有一個值列表:
GenericUserNames
test
temp
trainee
123
這些值需要與此表中的字段UserID
和UserName
進行比較:
UserID, UserName
test123, test 123
GriffinPeter, Peter Griffin
traineeone, trainee one
如果其中之一包含其中一個值的一部分,則EvalCheck
需要設置為 1,否則設置為 0。
UserID, UserName, EvalCheck
test123, test 123, 1
GriffinPeter, Peter Griffin, 0
traineeone, trainee one, 1
這是我到目前為止所擁有的:
Select A.GenericUserNames
B.UserID,
B.UserName
(Case
When B.UserName Or B.UderID Like '%' + In (Select A.GenericUserNames From A) + '%'
Else 0
End
) As EvalCheck
From A, B
請注意,我需要將一個用戶/行的所有列與通用用戶名的所有值進行比較。
使用LEFT JOIN
:
select distinct t2.UserName, t2.FirstName, t2.LastName,
(case when t1.GenericUsernames is null then 0 else 1 end) as EvalCheck
from table2 t2 left join
table1 t1
on (t2.UserName like '%' + t1.GenericUsernames + '%' or
t2.userid like '%' + t1.GenericUserNames + '%'
);
注意:使用標准的顯式JOIN語法而不是逗號語法。
例如,您正在執行的CROSS連接不足以滿足您的需求。
LIKE將是 NON-Sargable,這意味着如果第二個表用戶名具有索引,則查詢優化將永遠不會使用該索引來幫助您獲得更快的結果。
使用exists
:
select t2.*,
(case when exists (select 1
from table1 t1
where t2.userid like '%' + t1.GenericUserNames + '%' or
t2.username like '%' + t1.GenericUserNames + '%'
)
then 1 else 0
end) as EvalCheck
from table2 t2
select distinct t2.UserName, t2.FirstName, t2.LastName,
(case when t1.GenericUsernames is null then 0 else 1 end) as EvalCheck
from table2 t2 left join
table1 t1
on t2.UserName = t1.GenericUsernames
or t2.FirstName= t1.GenericUsernames
or t2.LastName= t1.GenericUsernames
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.