Добавить столбец из таблицы в таблицу - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть 2 таблицы:

  • Customers таблица с CustomerID (PK) и CustomerName столбцами
  • Orders таблица с CustomerName и Product columns

Я хочу добавить столбец CustomerID в таблицу Orders, чтобы он подходил для правильного клиента (который может появляться в этой таблице более одного раза).

Я попытался, добавив новый столбец в таблицу Orders, а затем запустил это обновление:

UPDATE Orders 
SET NewColumn = (SELECT CustomerID FROM Customers 
                 WHERE CustomerName = Customers.CustomerName)
WHERE (NewColumn IS NULL)

Однако новый столбец все еще оставался null.

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Поскольку у вас есть один и тот же столбец в обеих таблицах, укажите, откуда вы читаете столбец.Должно работать следующее:

UPDATE Orders 
SET NewColumn = (select Customers.CustomerID from Customers 
  where Orders.CustomerName = Customers.CustomerName)
WHERE NewColumn is null
0 голосов
/ 20 декабря 2018

Вы можете использовать реляционные операторы PIVOT и UNPIVOT, чтобы изменить табличное выражение в другую таблицу.

https://docs.microsoft.com/en-us/sql/t-sql/queries/from-using-pivot-and-unpivot?view=sql-server-2017

0 голосов
/ 20 декабря 2018

То, что вы ищете здесь, это JOIN, как показано ниже.Обратите внимание, однако, мой комментарий я сделал под вашим ответом.В результате это может не работать, так как имена не уникальны.(Комментарий под вопросом: "Обратите внимание, что имя является плохим выбором для первичного / внешнего ключа. Имена не являются уникальными (я даже встречал человека с тем же именем и датой рождения, что и у меня),поэтому будьте готовы к ошибкам при написании запроса. "):

UPDATE O
SET NewColumn = C.CustomerID
FROM dbo.Orders O
     JOIN dbo.Customers ON O.CustomerName = C.CustomerName;

Если вы все-таки столкнетесь с ошибками / аномалиями, тогда нам нужно знать, как вы определяете, какой клиент является правильнымодин.

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