簡體   English   中英

如何使用 IN 和 LIKE 運算符將值與 SQL 中另一個表中的多個值進行比較?

[英]How to compare values with multiple values from another table in SQL using IN and LIKE operator?

我在一張表中有一個值列表:

GenericUserNames
test
temp
trainee
123

這些值需要與此表中的字段UserIDUserName進行比較:

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.

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