子查询返回的值超过一个。当子查询跟随=、!=、<、<=、>、>=或子查询用作表达式时,这是不允许的。
我知道你们中的大多数人可能已经看到这个错误一百次了,一个简短的回答就是将操作符=in改为in,但是,这似乎不适用于我。
UPDATE _RS
SET _RS.GroupID = (SELECT ID FROM _RefSkillGroup WHERE Code like '%SKILL_GODBLESS_%')
FROM _RefSkill _RS
JOIN _RefSkillGroup _RSG
ON _RS.GroupID=_RSG.ID
WHERE _RS.ID BETWEEN 33816 AND 33824
UPDATE _RefSkill
SET GroupID = (SELECT ID FROM _RefSkillGroup WHERE Code LIKE '%SKILL_GODBLESS_%')
WHERE ID BETWEEN 33816 AND 33824
这是在_RefSkill中的:
Service ID GroupID Basic_Code
1 33816 1027 SKILL_GODBLESS_FIRE
1 33817 1028 SKILL_GODBLESS_RED
1 33818 1029 SKILL_GODBLESS_BLUE
1 33819 1030 SKILL_GODBLESS_WHIT
这是在_RefSkillGroup中
ID Code
1038 SKILL_GODBLESS_FIRE
1039 SKILL_GODBLESS_RED
1040 SKILL_GODBLESS_BLUE
1041 SKILL_GODBLESS_WHIT
发布于 2020-06-08 08:49:40
谢谢你澄清你的要求。
查询如下:
UPDATE _RS
-- "update the column GroupID in _RefSkill with the value of ID"
SET _RS.GroupID = _RSG.ID
FROM _RefSkill _RS
-- You join on a table where you want to look up a value.
-- "given that the Basic_Code in _RefSkill is the same as Code in _RefSkillGroup"
JOIN _RefSkillGroup _RSG ON _RS.Basic_Code =_RSG.Code
WHERE _RS.ID BETWEEN 33816 AND 33824
其他注释:我建议您不要在表/列名前加上下划线。
更新:
此SO question处理各种更新连接格式。
发布于 2020-06-08 12:00:38
您的代码可以使用关联子句而不是join
。
UPDATE RS
SET GroupID = (SELECT rsg.ID
FROM _RefSkillGroup rsg
WHERE rsg.Code LIKE '%SKILL_GODBLESS_%' AND
rs.GroupID = rsg.ID
)
FROM _RefSkill RS
WHERE RS.ID BETWEEN 33816 AND 33824;
这假设子查询确实只为RS
中的每一行返回一行。如果不是,您需要找出这些行中的哪一行。
https://stackoverflow.com/questions/62257081
复制相似问题