sql server 2005 ‘обновление от ‘ query

#sql #sql-server-2005 #sql-update

#sql #sql-server-2005 #sql-обновление

Вопрос:

Я пытаюсь обновить таблицу на основе идентификатора пользователя из другой таблицы. Я наткнулся на обновление из синтаксиса, но я изо всех сил пытаюсь правильно написать свой запрос.

Приведенный ниже код должен показать вам, что я пытаюсь сделать. Когда я запускаю его, я получаю 0 затронутых строк.

     update jared_test
       set user_count  = 1
      from new_user nuj
inner join (select us.userID
              from users us
             where us.email = 'j@j.co.uk') u on nuj.userid = u.userid
  

/********Редактировать*******************

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

Комментарии:

1. выберите us.userId из users us, где us.email = ‘j@j.co.uk ‘ есть ли какое-либо значение?

Ответ №1:

 update jared_test
set user_count = 1
where userid = 
  (select userID from users where email = 'j@j.co.uk')
  

попробуйте это

Комментарии:

1. это должно было бы сопоставлять пользователей из таблицы users по текстовому столбцу электронной почты, который может не индексироваться… Конечно, проще и намного быстрее ПРИСОЕДИНИТЬСЯ к пользователям на основе new_user.userid, равного users.userid И users.email = ‘j@j.co.uk ‘

Ответ №2:

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

 update aliasName
set aliasName.user_count =1 
from new_user aliasName
inner join users u on aliasName.userid = u.userid
where email = 'j@j.co.uk'
  

Ответ №3:

Похоже, вы не устанавливаете никакой связи между таблицей «jared_test» и двумя таблицами, которые вы выбираете с помощью «new_user / nuj» и «users / us».

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

 update nuj
set user_count  = 1
from new_user nuj
inner join (select us.userID
            from users us
            where us.email = 'j@j.co.uk') u on nuj.userid = u.userid
  

(если это так, стандартное обновление, предложенное @Devan, имело бы больше смысла)