2011-05-17 133 views
0

我试图根据另一个表中的用户标识更新表。我遇到了从语法更新,但我努力正确地写我的查询。sql server 2005从'查询'更新

下面的代码应该告诉你我正在尝试做什么。当我运行它时,我得到0行受到影响。

update jared_test 
     set user_count = 1 
     from new_user nuj 
inner join (select us.userID 
       from users us 
      where us.email = '[email protected]') u on nuj.userid = u.userid 

/* ** * ** * *EDIT* ** * ** * ** * ** * ** * ** * \

我发现有一个问题,我的Cursor循环阻止了它的工作,所以这确实有效。然而,如果在这种情况下优化比哪里更好,我会感兴趣。

+0

从用户中选择us.userID我们在哪里us.email ='[email protected]'是否有任何价值? – Nighil 2011-05-17 11:23:53

回答

0

我不是为什么其他的解决方案是使用子查询100%,这将执行比普通的要慢加入最经常。尽管taos子查询本质上是一个有趣的常规连接。

update aliasName 
set aliasName.user_count =1 
from new_user aliasName 
inner join users u on aliasName.userid = u.userid 
where email = '[email protected]' 
1
update jared_test 
set user_count = 1 
where userid = 
    (select userID from users where email = '[email protected]') 

试试这个

+0

这将不得不通过文本电子邮件列来匹配users表中的用户,这可能不会被编入索引...基于new_user.userid等于users.userid和users.email,加入用户当然更容易和更快速='[email protected]' – iandayman 2011-05-17 12:35:52

0

你似乎并不被建立表之间的“jared_test”,而要通过选择两个表,“new_user/NUJ”和“用户/我们”无任何关系。

您的意思是?

update nuj 
set user_count = 1 
from new_user nuj 
inner join (select us.userID 
      from users us 
      where us.email = '[email protected]') u on nuj.userid = u.userid 

(如果是这样,一个标准更新为@Devan建议会更有意义)