T-SQL-SQL Server-根据ID_A从ID_B更新记录

T-SQL-SQL Server-根据ID_A从ID_B更新记录,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有两个维度: Permissions - Permission_ID - Permission_Desc Users: - User_ID - User_Name 还有一个事实表: 现在我要做的是将User_ID 1拥有的权限应用于User_2。将用户\u ID\u 1的权限复制到用户\u ID\u 2 我如何在Update语句中做到这一点 谢谢 这不是最有效的方法,但是,我认为只要我正确理解了这个问题,这应该能起到作用:- Create Table #permissions

我有两个维度:

Permissions

- Permission_ID
- Permission_Desc

Users:

- User_ID
- User_Name
还有一个事实表:

现在我要做的是将User_ID 1拥有的权限应用于User_2。将用户\u ID\u 1的权限复制到用户\u ID\u 2

我如何在Update语句中做到这一点


谢谢

这不是最有效的方法,但是,我认为只要我正确理解了这个问题,这应该能起到作用:-

    Create Table #permissions (permission_id int, permission_desc 
    varchar(100))

    insert into #permissions values (1, 'select'),(2,'insert')

   Create Table #users (user_idd int, user_desc varchar(100))

   insert into #users values (1, 'John'),(2,'Rohn')

   Create Table #fact_table (user_idd int, permission_id int, sal int)

   insert into #fact_table values (1,1,200), (2,2,300)

   select * from #fact_table 
   update a set a.permission_id = b.permission_id from #fact_table a 
    inner join (
    select (select user_idd from #fact_table where user_idd=2) user_idd, 
   permission_id, sal from #fact_table where permission_id = 1
   ) b on a.user_idd=b.user_idd

一种快速的方法是删除分配给用户2的所有权限。然后:在事实表格中插入从事实表格中选择2、权限ID、工资金额,其中用户ID=1,假设用户2的ID=2,用户1的ID=1。我还假设用户_2应该和用户_1拥有相同的工资金额,简单的更新在这里不起作用吗?更新事实\u表设置权限\u id=从事实\u表中选择权限\u id,其中用户\u id=用户\u 1\u id,其中用户\u id=用户\u 2\u id?你试过什么?@Rigerta这似乎是多对多,但不起作用relationship@Rigerta问题在于,UserID_1比UserID_2拥有更多的权限。我运行您的查询,发现以下问题:子查询返回的值超过1。当子查询在=、!=、=或者当子查询用作表达式时。@Petaflop nop,User_2和User_1的薪水不一样
    Create Table #permissions (permission_id int, permission_desc 
    varchar(100))

    insert into #permissions values (1, 'select'),(2,'insert')

   Create Table #users (user_idd int, user_desc varchar(100))

   insert into #users values (1, 'John'),(2,'Rohn')

   Create Table #fact_table (user_idd int, permission_id int, sal int)

   insert into #fact_table values (1,1,200), (2,2,300)

   select * from #fact_table 
   update a set a.permission_id = b.permission_id from #fact_table a 
    inner join (
    select (select user_idd from #fact_table where user_idd=2) user_idd, 
   permission_id, sal from #fact_table where permission_id = 1
   ) b on a.user_idd=b.user_idd