【发布时间】:2017-03-02 15:27:27
【问题描述】:
我有一个帐户表,其中有一行用于 role_id。我有另一个名为组织组的表,其中包含与组织关联的组,这个表有一个 ID 和一个名称列。我有第三个名为 account_group 的表,它有两列 account_id 和 group_id 将两者映射在一起。
现在我想检查帐户的组,并根据组的名称更新此帐户的角色 id 值。
我设法想到的查询:
UPDATE account
SET account.role_id = (CASE WHEN organisation_group.name = "Social Worker" THEN 50
WHEN organisation_group.name = "Foster Carer" THEN 26
END)
WHERE organisation_group.name in
(SELECT organisation_group.name FROM organisation_group
INNER JOIN account_group ON organisation_group.id = account_group.group_id
WHERE organisation_id = 11 GROUP BY organisation_group.name);
这会引发以下错误 Unknown column 'organisation_group.name' in 'IN/ALL/ANY subquery' 。我不擅长 SQL,但我需要这个更新。任何想法如何执行此操作。
50 和 26 是我要使用的角色 ID。
更新 1(更清晰的解释)
我有一个包含 [id,username,name,role_id,organisation_id] 列的帐户表。
我需要编辑 account.role_id 列。我需要做的是:
- 检查帐户的组名。
这些组位于名为 organization_group 的表中。该表有三列 [id,organisation_id,name]。
要将帐户与组映射,我有一个名为 account_group 的表,其中包含三列 [id. account_id , group_id]。
2- 根据组名,我需要更新 account.role_id 以在(组名 = 角色名)时具有角色 ID。
角色存储在名为 organization_role 的表中,该表包含 [id,name,organisation_id] 列。
【问题讨论】:
-
您不能在子查询之外访问
organisation_group表。 -
一些示例数据或更好地描述您正在尝试做的事情会有所帮助。
-
您的查询没有意义。您正在按
organisation_group.name对子查询进行分组。因此,您将失去与account表的任何关系。 -
@PaulSpiegel 我承认这可能没有意义,因为我在 SQL 方面不是那么好,这是我试图解决我的问题。感谢您查看问题,我已经添加了我想要做什么的额外描述。
-
看起来您的查询与您的要求无关 :-)。你的要求有点奇怪。尝试用示例数据来解释。
标签: mysql sql-update inner-join