0

私はこれらの2つのテーブルを持っています

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

ID名制御
1255、Almonte Jimenez Adalgisa、1131238601
92、Encarnacion Pamela、1131237483
3376、Feliz Luis Manuel、1131240995
688、HerrandMariñeDiomedes
、1131238666666666666666666666666666666666666666666666666666666666666666666666

est_data
(
id(int, null),
name(varchar(255), null),
firstname(varchar(255), null),
lastname(varchar(255), null),
)

id name firstname lastname
201201255 ,ADALGISA ,ALMONTE ,JIMENEZ ,
201200092 ,PAMELA ,ENCARNACION , ,
201223376 ,LUIS MANUEL ,FELIZ , ,
201200688 ,DIOMEDES ,HERRAND ,MARIÑTOE ,
MASTOALBERS , 2012JO01887

そしてこの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)

この結果:

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

「ホセ・アルベルト・マトス」です

そしてこの結果:

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

「ホセ・アルベルト・マトス」です

ただし、名前が同じ場合、コードは 0 行を返します。ここで何が問題になる可能性がありますか?

注: SQL Server 2000 を使用しています

4

2 に答える 2

2

データを注意深く見てください。f_dataあなたには「JOSE ALBERTO MATOS」という価値nameがあります。「JOSE」、「ALBERTO」、 「MATOS」がありest_dataます。namefirstnamelastname

でのクエリを見てください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);
于 2012-10-12T15:47:47.150 に答える
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)
于 2012-10-12T15:56:28.520 に答える