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

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


回答

不一定非要一条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

修改第一等级,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;

以上是 图1是数据表,图2是字典表,如下sql怎么写呀? 的全部内容, 来源链接: utcz.com/a/40702.html

回到顶部