我有三张牌桌:角色,权限,& RolePermissions(将两个表链接在一起。它有两列:RoleId和PermissionId)。
我在权限中添加了一个新行,因此我需要将其设置为任何具有权限= 117的角色也等于我刚刚创建的最新权限(可以是任何数字)。 例如,假设您具有权限117的顾问角色,那么您将自动拥有此新权限(即max(id))
这是我尝试过的代码:
INSERT INTO RolePermissions
VALUES
(
(SELECT RoleId FROM RolePermissions WHERE PermissionID = '117'),
(select max(id) from Permissions)
);
它说:
子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
我相信它是因为有多个角色= 117所以它需要制作多行。我是一个n00b并且不确定如何使它成为多行,我会使用循环吗?
谢谢
答案 0 :(得分:3)
您的子查询中没有WHERE子句,因此每个权限返回每个max_ID
试
INSERT INTO RolePermissions VALUES (RoleID, PermissionID, newcolumn)
SELECT RoleID, PermissionID, (SELECT MAX(ID) from Permissions) from
RolePermissions WHERE PermissionId = 117
要打破这一点:
您要将其添加到您的联接表中,包括您未提及名称的“新列”...
您将从原始表中选择RoleID和PermissionID,您的PermissionID = 117(如果这是INT字段,则不需要单引号)。如果要进一步隔离MAX(Id)将WHERE子句添加到子查询中,您将对Permissions表的MAX(ID)的最后一列进行子查询。
这会将具有权限ID = 117的所有用户添加到表中,他们应该已经拥有记录。所以你现在每人有两条记录,其中PermissionId 117,唯一的区别在于附加列,第一条记录将为null,第二条记录的值为MAX(Id)
如果您不想添加新成员,可能需要更新permissionId = 117的行 为此,你会:
UPDATE RolePermissions
SET newcolumn = (SELECT MAX(ID) from Permissions)
WHERE PermissionID = 117