感觉挺难的:这条sql语句应该如何写?

lufree 2003-10-23 08:21:08
a表:

零件编号 英文名称

11331-01G01 MEMBER ASSY
11920-31UX2 BELT
11950-31U02 BELT-P/S.O/PUMP
13264-31U16 COVER ASSY-VALV
13264-31U20 COVER ASSY-VALV
13264-4E300 COVER ASSY-VALV
....


b表:

零件编号 中文名称

01436-00331 分电器螺丝 00231
01551-00033 仪表台卡子
01553-00855 门内饰板胶扣
01555-00023 DX 水管卡子 小
01555-00561 进气胶管卡子
.....

现在的要求是要将a表和b表中的相同的零件编号的中文名称添加到a表中,也就是翻译a表的零件名称的作用。如果这两个表的编号完全匹配,那么
这个sql语句我会写:

select a.*,b.中文名称 into newtable
from a inner join b on a.零件编号=b.零件编号


可是现在的问题是这两个表中的零件编号不完全匹配,也就是说a表中的某个编号的纪录b表中没有或者只有后五位数字不一样,但是现在已知只要编号的前五位相同,那么零件的名称
就相同,于是我写下了这个sql语句:

select a.*,b.中文名称 into newtable
from a inner join b on substring(a.零件编号,1,5)=substring(b.零件编号,1,5)

可是返回的结果不正确,原来a表中只有400多行,可是这条语句执行后变成了1万多行。

想想可能是因为a,b表中前五位数字相同的行都有很多,所以对于每个纪录连接时就返回了多个与他相同的行吧

那么这条sql语句应该怎么写呢?

语句中用了中文是为了让您看得明白,实际的语句没有中文。。。
...全文
78 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
txlicenhe 2003-10-23
  • 打赏
  • 举报
回复
try:
Select a.*,(Select top 1 中文名称 from b表 where left(零件编号,5) = left(a.零件编号,5)) as 中文名称 from A表 a
lufree 2003-10-23
  • 打赏
  • 举报
回复
to txlicenhe(马可)

那个是零件的别名,无所谓的。


to pengdali(大力 V3.0)

那么应该如何写呢
lufree 2003-10-23
  • 打赏
  • 举报
回复
左连接我试过了,不行

用左连接时a表的行在b表中不匹配的列就变成了null,现在要求全都翻译过来,而且保证在b表中有前五位编号与a表中的纪录匹配。

现在的问题是如何使用前五位编号来连接2个表,因为2个表中前五位编号相同的纪录都有很多。。。
txlicenhe 2003-10-23
  • 打赏
  • 举报
回复
01555-00023 DX 水管卡子 小
01555-00561 进气胶管卡子

头五位相同,可中文名称不同啊?
pengdali 2003-10-23
  • 打赏
  • 举报
回复
你的代码肯定会这样,你的逻辑还没有清楚。

aaa-aaa
aaa-bbb

对应

aaa-aaa
aaa-bbb

你用substring会出来4条记录,这是肯定的。你只有用完全匹配才可以得到2条记录
friendliu 2003-10-23
  • 打赏
  • 举报
回复
这样的话只就匹配A表中的数据了
friendliu 2003-10-23
  • 打赏
  • 举报
回复
用左联接应该就可以了

select a.*,b.中文名称 into newtable
from a left join b on a.零件编号=b.零件编号

34,874

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧