2011-05-17 3 views
0

Я пытаюсь обновить таблицу на основе идентификатора пользователя из другой таблицы. Я столкнулся с синтаксисом Update from, но я пытаюсь правильно написать свой запрос.sql server 2005 'update from' query

В приведенном ниже коде должно быть показано, что я пытаюсь сделать. Когда я запускаю его, я получаю 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* ** * ** * ** * ** * ** * ** * \

Я обнаружил, что возникла проблема с моей петлей курсора, которая мешала этому работать, поэтому это действительно работает. Однако мне было бы интересно, если где-то лучше, чем в этом случае для оптимизации.

+0

выбрать us.userID у пользователей, где us.email = '[email protected]' есть ли какая-либо ценность? – Nighil

ответ

0

Я не 100% о том, почему другие решения, используя подзапрос, который будет работать медленнее, чем обычный присоединиться чаще всего. Хотя субэлемент таоса - это, по сути, регулярное соединение, просто написанное интересно.

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

это должно соответствовать пользователям из таблицы пользователей текстовым столбцом электронной почты, который не может быть проиндексирован ... Конечно, проще и намного быстрее присоединиться к пользователям на основе new_user.userid, равным users.userid И users.email = '[email protected]' – iandayman

0

кажется, Вы не должны установить какие-либо отношения между таблицей «jared_test» и двух таблиц, которые вы выбирающих по «new_user/НСЖ» и «пользователи/нас» ,

Вы имели в виду это?

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 предложил бы больше смысла)