SQL - обновление таблицы, без индекса - PullRequest
0 голосов
/ 13 марта 2012

У меня есть две таблицы: DIM_Staff и FACT_Sales

Я хочу обновить [e-mail] до FACT_Sales с DIM_Staff.

Единственный способ связать [e-mail] через DIM_Staff.[Name] и FACT_Sales.[Name], так как номер социального страхования отсутствует.

Я уже просмотрел обе таблицы, чтобы проверить их на наличие орфографических ошибок.

Это то, что я пробовал такfar:

UPDATE [vdb].[dbo].[FACT_Sales] 
SET [e-mail] = (SELECT [e-mail] FROM DIM_Staff WHERE [Name] = [dbo].[FACT_Sales].[Name])


UPDATE [vdb].[dbo].[FACT_Sales] 
SET [e-mail] = (SELECT [e-mail] FROM DIM_Staff WHERE [Name] in (SELECT [Name] FROM [dbo].[FACT_Sales])

Сообщение об ошибке:

Msg 512, уровень 16, состояние 1, строка 1
Подзапрос вернул более 1 значения.Это недопустимо, если подзапрос следует =,! =, <, <=,>>,> = Или когда подзапрос используется в качестве выражения.Оператор был прекращен.

Это должно быть довольно простое обновление?

Ответы [ 3 ]

2 голосов
/ 13 марта 2012

попробуйте следующее

UPDATE t
SET t.[e-mail] = t2.[e-mail]
from [vdb].[dbo].[FACT_Sales] t
inner join DIM_Staff t2
on t.Name = t2.Name
0 голосов
/ 13 марта 2012

Итак, вы не можете выполнить этот запрос, потому что это было бы похоже на выполнение

set email = val1, val2, val3

, что недействительно

Я не уверен, что такое dbms, но в PostgreSQL и MySQL вы должны иметь возможность обновлять внутреннее объединение, таким образом, все строки, не соответствующие условию, исключаются, и вы можете выполнить обновите просто так.

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

0 голосов
/ 13 марта 2012

Да, но в DIM_Staff есть люди с одинаковыми именами. Вы должны решить это в первую очередь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...