2015-01-19 3 views
0

Я пытаюсь обновить столбец города в таблице a_customer_test на основе их почтового индекса.Строка SQL Update с внутренним соединением с подстрокой

ЗЕЬЕСТ работает отлично

SELECT * FROM dbo.postcodes b with(nolock) 
left join a_customer a with(nolock) 
on SUBSTRING (a.postcode,1,3) = SUBSTRING (b.postcode,1,3) 

Но когда я применить ту же логику и запроса на обновление этого не хочет работать он будет работать, но ничего не будет обновляться.

UPDATE 
a_customer_test 
SET 
a_customer_test.town = b.town 
FROM dbo.postcodes b with(nolock) 
left join a_customer a with(nolock) 
on SUBSTRING (b.postcode,1,3) = SUBSTRING (a.postcode,1,3) 

* Рабочая запрос *

UPDATE 
a_customer_test 
SET 
a_customer_test.town = b.town 
FROM dbo.postcodes b with(nolock) 
left join a_customer_test a with(nolock) 
on SUBSTRING (a.postcode,1,3) = SUBSTRING (b.postcode,1,3) 
WHERE SUBSTRING (b.postcode,1,3) = SUBSTRING (a.postcode,1,3) 
AND a.postcode is not null 

ответ

0

Итак, вы хотите, чтобы обновить все [города] колонке a_customer_test с одним значением из b.town? Я думаю, вам нужно присоединиться к a_customer_test с чем-то и соответствующим образом обновить его столбец.

Если вы хотите заполнить [город], когда найдете совпадение, вам нужно указать только одно значение для обновления. Использовать SELECT TOP 1, например,

UPDATE 
a_customer_test 
SET 
a_customer_test.town = 
(SELECT TOP 1 b.town 
FROM dbo.postcodes b with(nolock) 
left join a_customer a with(nolock) 
on SUBSTRING (b.postcode,1,3) = SUBSTRING (a.postcode,1,3) 
WHERE a.postcode IS NOT NULL) 
+0

Я хочу только обновить столбец города, когда первые 3 цифры совпадают, поэтому я использовал в качестве подстроки, поскольку это было бы намного быстрее. – user3049698

+0

Можете ли вы попробовать добавить предложение WHERE? – Minh

+0

Мне нужно обновить [город] разными значениями в зависимости от соответствия почтового индекса – user3049698

Смежные вопросы