두 테이블 tmpModels 및 tmp_product가 있습니다. tmpModel의 모델을 기반으로 일치하는 모델을 찾아야합니다. 예를 들어, tmpmodel.updatedmodel ='amb3771'
및 tmp_product.updatedmodel
이 'amb3771bian' or '123abc3771xv'
일 수있는 경우 일치 항목이 있습니다. tmp_product.updatedmodel이 updatedmodel 열의 모든 위치에서 tmpmodel과 일치하는 패턴을 포함해야한다는 것을 의미합니다.패턴을 기반으로 한 SQL 결합
실제로 저장 프로 시저를 만들었지 만 여기에는 하나의 특정 값에 대한 동작을 확인하는 스 니펫이 있습니다.
declare @model1 nvarchar(255)
set @model1 = 'amb3771'
select g.updatedmodel as GFK,p.updatedmodel Product from dbo.tmpModels g
join dbo.tmp_product p
on g.updatedmodel= substring(p.updatedmodel,PATINDEX('%@model1%',p.updatedmodel),LEN(@model1))
select @model1
결과에 2 개의 행만 표시 될 것으로 예상됩니다. 왜 다른 값이 @model1
에 할당되는 지 이해할 수 없지만 'amb3771'에 강제로 설정하고 이상하게도 'amb3771'과 일치하는 결과가 없습니다 !! 이 논리가 작동하지 않는 이유를 이해하고 원하는 결과를 얻도록 도와주십시오. DLeh가 @model
이 따옴표로 안 언급 한 바와 같이 모든
GFK Product
w679 w679
t754cw t754cw
wa5714 wa5714silber
fl2823 fl2823
dc7230 dc7230
wda100 wda100
wa74sd wa74sd
ev9547 ev9547
wa5714 wa5714weiss
wa7439 wa7439
wda210 wda210wpm
wda210 wda210wpm
w194 w194
wda110 wda110wcs
wa5714 wa5714silber
wda100 wda100
'PATINDEX ('% @의 모델 1 %의' '-의'에 싸여'@의 model1'는 – DLeh
이유 헉 당신이, 당신을 보여 쿼리하십시오. tmpModels의 전체 테이블 스캔을 수행하고 있습니다. 그런 다음 해당 테이블의 모든 행에 대해 tmp_product의 전체 테이블 스캔을 수행하고 있습니다. 예상되는 2 행 결과에 대해 엄청난 양의 테이블 스캔이 될 수 있습니다. tmpModels 행을 사용하면 결합 기준을 sargable로 만들 수있는 방법이 없습니다. 가장 좋은 장기 전략은 'amb3771'과 'xxxamb3771xxx'사이의 간단한 커넥터를 만드는 것입니다. 이미 존재하지 않는 것이 있다면 그것을 만들어라. – TommCatt
@ DLeh, 고마워! 따옴표. 그것을 붙잡고 계속 그에게 논리에 대해서만 염려했다. – SKa