【发布时间】:2018-11-17 14:16:13
【问题描述】:
我有一张表user我需要更新,
user 表包含branchId 和accountName。 branchId 是表 branch 上的 fk 引用,其中包含 institutionId。 InstitutionId 是对 institution 表的 FK 引用。机构表包含name和id。
我想将user 表中的accountName 更新为该用户的等效机构名称。
我目前拥有的是
update [user] set accountName =
(Select i.NAME from institution i LEFT JOIN [branch] b on b.institution_id = i.id and b.id = branchId)
但我得到了
子查询返回超过 1 个值。这是不允许的,当 子查询遵循 =、!=、、>= 或当子查询用作 一种表达。声明已终止。
我正在使用mssql。
我不是使用 sql 的专业人士。任何帮助将不胜感激。
谢谢!
【问题讨论】:
-
嗯....错误很明显。您的子查询返回超过 1 行,因此它不知道要使用哪个值。你需要一些东西来匹配用户。可能像一个机构 ID。
-
是的,这就是我这样做的原因,
b.id = branchId,branchId来自user表 -
查看此 URL 寻求帮助 stackoverflow.com/questions/1604091/…
-
我的问题是为什么?用户将简单地复制机构。相反,如果用户也有个人用户名/ id,那么添加机构 id 是有意义的,那么要获取机构的名称,您只需要 select u.name, i.name from user u, authority i where u.institution = i.id。这可以防止数据重复。这可能会导致问题。
-
@Danimal 表结构比你想象的要复杂。我只是缩小了提问的范围
标签: sql sql-server database sql-server-2008