H5W3
当前位置:H5W3 > 其他技术问题 > 正文

图1是数据表,图2是字典表,如下sql怎么写呀?

需求:把test_his里面ts1,ts2,ts3字段的汉字变成sm_dict_grade里面的id。两个表的关联就是sm_dict_grade表的name。
说明,sm_dict_grade里面的grade是等级的意思,一共有三级,有的name值是相同的,但是上级不同

image
image

回答:

修改第一等级,GRADE=1并且TS1=NAME

update test_his t1 inner join sm_dict_grade t2 on t2.grade=1 and t1.TS1=t2.NAME set t1.TS1=t2.ID;

修改第二等级,GRADE=2并且TS2=NAME并且TS1=PANME

update test_his t1 inner join sm_dict_grade t2 on t2.grade=2 and t1.TS2=t2.NAME and t1.TS1=t2.PANME set t1.TS2=t2.ID;

修改第三等级,GRADE=3并且TS3=NAME并且TS2=PANME

update test_his t1 inner join sm_dict_grade t2 on t2.grade=3 and t1.TS3=t2.NAME and t1.TS2=t2.PANME set t1.TS2=t2.ID;

要从上到下依次执行,有用到上级的id值。
一开始看不懂所说的有的name值是相同的,但是上级不同,看了下sm_dict_grade表的ID 19和20的数据才明白,NAME可能相同,但PANME不同,对应上一级的ID,所以关联条件中要包含上级关联。

如果不确定修改是否正确,建议先查出来,人工比对下,再执行update!
例如:

select t1.NUM,t1.TS1,t1.TS2,t1.TS3,t2.NAME,t2.PANME
from test_his t1 
  inner join sm_dict_grade t2 on t2.grade=3 and t1.TS3=t2.NAME and t1.TS2=t2.PANME;

回答:

不一定非要一条sql啊,分三条就是,类似更新第一级的:

UPDATE test_his AS t
  JOIN sm_dict_grade AS s ON s.GRADE = 1 AND s.NAME = t.TS1
SET t.TS1 = s.ID

本文地址:H5W3 » 图1是数据表,图2是字典表,如下sql怎么写呀?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址