2012-10-12 1 views
0

으로 2 VARCHAR를 관련이 없습니다나는이 2 개 개의 테이블이 같은 값

f_data 
(
id (int, null), 
name(varchar(255), null), 
control (int, null), 
) 

ID 이름 제어
1255, 몬테 네즈 ADALGISA, 1131238601
(92), 엔카 나 시온 PAMELA, 1131237483
3376, FELIZ 1,131,240,995
688 LUIS MANUEL, HERRAND 해양 디오메데스, 1,131,238,666
1887 JOSE ALBERTO 마토스, 1,131,240,215

,744,396,573,210

ID 이름 FIRSTNAME이 lastName
201,201,255, ADALGISA, 몬테, 네즈,
201,200,092 파멜라, 엔카 나 시온,
201,223,376 루이스 MANUEL, FELIZ,
201,200,688, 디오메데스, HERRAND, 해양,
201,201,887 , 호세 알베르토, 마토스,

이 SQL 코드

select * 
from est_data 
where 
    CASE 
    WHEN 
    lastname = ' ' 
    then 
    ltrim(rtrim(firstname)) + ' ' + ltrim(rtrim(name)) 
    ELSE 
    ltrim(rtrim(firstname)) + ' ' + ltrim(rtrim(lastname))+' '+ltrim(rtrim(name)) 
    END in 
     (Select ltrim(rtrim(name)) From f_data where id = 1887) 
이러한 5,

그 결과

Select ltrim(rtrim(name)) From f_data where id = 1887 

가 'JOSE ALBERTO 마토스'

이다

CASE 
    WHEN 
    lastname = ' ' 
    then 
    ltrim(rtrim(firstname)) + ' ' + ltrim(rtrim(name)) 
    ELSE 
    ltrim(rtrim(firstname)) + ' ' + ltrim(rtrim(lastname))+' '+ltrim(rtrim(name)) 
    END 

이 중 'JOSE ALBERTO 마토스'

및 결과

그러나 코드는 이름이 같을 때 0 행, 이벤트를 반환합니다. 여기에 무슨 문제가 있을까요?

참고 : SQL Server 2000을 사용 중입니다.

답변

2

데이터를주의 깊게 살펴보십시오. f_data에는 name 값이 "JOSE ALBERTO MATOS"입니다. est_data에는 name "JOSE", firstname "ALBERTO"및 lastname "MATOS"가 있습니다.

이제 est_data에 대한 귀하의 질의를보십시오. FIRSTNAME-LASTNAME-NAME (이 경우 "ALBERTO MATOS JOSE")과 결합하여 f_data의 값과 일치하지 않습니다. 두 곳에서 이름을 똑같이 주문하지 않습니다.

당신이 저를 믿지 않는 경우에, 다만 문제가 다시이 간단한 스크립트를 실행

create table #f_data 
(
id int, 
name varchar(255), 
control int 
); 

create table #est_data 
(
id int, 
name varchar(255), 
firstname varchar(255), 
lastname varchar(255) 
); 

insert into #f_data(id, name, control) values (1887, 'JOSE ALBERTO MATOS', 1); 

insert into #est_data(id, name, firstname, lastname) values (1887, 'JOSE', 'ALBERTO', 'MATOS'); 

Select ltrim(rtrim(name)) From #f_data where id = 1887; 

select CASE 
    WHEN 
    lastname = ' ' 
    then 
    ltrim(rtrim(firstname)) + ' ' + ltrim(rtrim(name)) 
    ELSE 
    ltrim(rtrim(firstname)) + ' ' + ltrim(rtrim(lastname))+' '+ltrim(rtrim(name)) 
    END 
from #est_data; 

select * 
from #est_data 
where 
    CASE 
    WHEN 
    lastname = ' ' 
    then 
    ltrim(rtrim(firstname)) + ' ' + ltrim(rtrim(name)) 
    ELSE 
    ltrim(rtrim(firstname)) + ' ' + ltrim(rtrim(lastname))+' '+ltrim(rtrim(name)) 
    END in 
     (Select ltrim(rtrim(name)) From #f_data where id = 1887); 
0

를 사용하여 하위 쿼리

select * from (
    select e.*, 
     CASE 
     WHEN e.lastname = ' ' 
     THEN ltrim(rtrim(e.firstname)) + ' ' + ltrim(rtrim(e.name)) 
     ELSE ltrim(rtrim(e.firstname)) + ' '+ltrim(rtrim(e.lastname)) + ' ' + ltrim(rtrim(e.name)) 
     END as wrappedName 
    from est_data e 
) where wrappedName = 
     (select ltrim(rtrim(name))) from f_data where id = 1887)