#tsql #sql-update
#tsql #sql-обновить
Вопрос:
Я импортировал таблицу элементов, которая имеет недопустимые состояния. Вместо аббревиатуры состояния она содержит завершенное название состояния.
Приведенный ниже запрос действительно работает и извлекает элементы.Имя состояния и State.Сокращение :
Connecticut CT
Maryland MD
Massachusetts MA
Теперь я пытаюсь написать и обновить команду, в которой я заменяю элементы.StateName с указанием состояния.Сокращение .
UPDATE dbo.Members
SET memState = (SELECT s.stAbv FROM dbo.State AS s
JOIN Members AS m ON s.stName = m.memState )
WHERE memState NOT IN (SELECT s.stAbv FROM dbo.State AS s)
ОШИБКА: Подзапрос вернул более 1 значения. Это не разрешено, когда следует подзапрос =, !=, <, <= , >, >= или когда подзапрос используется как выражение.
Выполнение инструкции было завершено. Я понимаю, что ошибка говорит о том, что мой внутренний запрос возвращает несколько строк, поэтому он не может обновиться. Как мне заставить это работать?
Комментарии:
1. У вас есть более одной строки состояния в dbo.State с одинаковым именем? Если вы это сделаете — не следует ли удалить тот или иной из них / пометить как удаленный — или привязать к определенной стране, если у вас в таблице есть штаты США, округа Великобритании и т.д.?
2. Приведенный ниже код сработал, ОБНОВИТЕ dbo.Members, УСТАНОВИТЕ memState = (ВЫБЕРИТЕ TOP 1 s.stAbv ИЗ dbo.State КАК s, ПРИСОЕДИНИТЕ членов КАК m К s.stName = m.memState ), ГДЕ memState ОТСУТСТВУЕТ (ВЫБЕРИТЕ s.stAbv ИЗ dbo.State КАК s)
3. Вы уверены, что это то, что вам нужно? Будет ли аббревиатура, возвращаемая TOP 1, аббревиатурой «правильного» состояния? Почему у вас в таблице > 1 состояния с определенным именем?
Ответ №1:
Я думаю, вы могли бы сделать это следующим образом:
UPDATE m
SET memState = s.stAbv
FROM dbo.Members AS m
INNER JOIN dbo.State AS s ON s.stName = m.memState
Не совсем уверен в вашем предложении WHERE, но, скорее всего, оно не требуется.
Ответ №2:
Вы не можете присвоить memState более 1 значения. Попробуйте ВЫБРАТЬ DISTINCT, чтобы объединить повторяющиеся значения в одно значение.