首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不能将两个varchar与相同的值关联起来

不能将两个varchar与相同的值关联起来
EN

Stack Overflow用户
提问于 2012-10-12 15:12:55
回答 2查看 110关注 0票数 0

我有这两张桌子

代码语言:javascript
复制
f_data
(
 id (int, null),
 name(varchar(255), null),
 control (int, null),
)

id名称控制

1255年,,1131238601

92,ENCARNACION PAMELA,1131237483

费利兹·路易斯·曼努埃尔( FELIZ LUIS MANUEL ),1131240995

688,HERRAND DIOMEDES,1131238666

1887年,何塞·阿尔贝托·马托斯,1131240215

代码语言:javascript
复制
est_data
(
id(int, null),
name(varchar(255), null),
firstname(varchar(255), null),
lastname(varchar(255), null),
)

id名名姓姓

201201255,ADALGISA,ALMONTE,JIMENEZ,

201200092,帕梅拉,恩卡纳西翁,

201223376,路易斯·曼纽尔,费利兹,

201200688,DIOMEDES,HERRAND,MARI E,

201201887,何塞·阿尔贝托,马托斯,

和这个SQL代码

代码语言:javascript
复制
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)

的结果:

代码语言:javascript
复制
CASE 
   WHEN 
    lastname  = ' ' 
   then 
    ltrim(rtrim(firstname)) + ' ' + ltrim(rtrim(name))   
   ELSE 
    ltrim(rtrim(firstname))   + ' ' + ltrim(rtrim(lastname))+' '+ltrim(rtrim(name)) 
   END

是“何塞·阿尔贝托·马托斯”

及其结果:

代码语言:javascript
复制
Select ltrim(rtrim(name)) From f_data where id = 1887

是“何塞·阿尔贝托·马托斯”

但是,当名称相同时,代码返回0行。这里可能有什么问题?

注意:我们使用的是Server 2000

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-12 15:47:47

仔细看你的数据。在f_data中,name值为"JOSE“。在est_data中,您有一个name "JOSE“、一个firstname "ALBERTO”和一个lastname "MATOS“。

现在看看您对est_data的查询。您正在组合FIRSTNAME-LASTNAME-NAME,在本例中它将是"ALBERTO“,它与f_data中的值不匹配。你不能在两个地方按相同的方式排序。

如果您不相信我,只需运行这个简单的脚本来重新创建问题:

代码语言:javascript
复制
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);
票数 2
EN

Stack Overflow用户

发布于 2012-10-12 15:56:28

使用子查询:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12862095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档