Я использую Microsoft SQL Server 2014. У меня есть две таблицы.Один для номеров заказов (Заказы) и один для промежуточных мест размещения заказов (StagingLocations).
Заказы
----------------------
| OrderNumber | Zone |
----------------------
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 1 |
| 5 | 1 |
| 6 | 1 |
| 7 | 1 |
----------------------
И
StagingLocations
---------------------------------
| Zone | Location | OrderNumber |
---------------------------------
| 1 | A | NULL |
| 1 | B | NULL |
| 1 | C | NULL |
| 1 | D | NULL |
| 1 | E | NULL |
| 2 | A | NULL |
| 2 | B | NULL |
| 2 | C | NULL |
| 2 | D | NULL |
| 2 | E | NULL |
---------------------------------
Мне нужно обновить таблицу StagingLocations с номерами заказов из таблицы Orders.Что-то вроде этого:
UPDATE
StagingLocations s
SET
s.OrderNumber = o.OrderNumber
FROM
StagingLocation s INNER JOIN
Orders o ON s.Zone = o.Zone
WHERE
o.OrderNumber IS NULL
Для достижения этой цели:
---------------------------------
| Zone | Location | OrderNumber |
---------------------------------
| 1 | A | 1 |
| 1 | B | 2 |
| 1 | C | 3 |
| 1 | D | 4 |
| 1 | E | 5 |
| 2 | A | NULL |
| 2 | B | NULL |
| 2 | C | NULL |
| 2 | D | NULL |
| 2 | E | NULL |
---------------------------------
Но при использовании этого запроса я получаю один номер заказа во всех местах с соответствующимзона вместо каждого номера заказа в своем собственном местоположении.
Я знаю, что могу достичь желаемых результатов с помощью цикла.Но я читал, что я должен стараться избегать циклов в SQL.Поэтому я бы очень хотел иметь возможность сделать это с помощью запроса.Я просто не могу придумать способ сделать это самостоятельно.
Любая и вся помощь будет оценена.Спасибо!