#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, имело бы больше смысла)