Как обновить значение таблицы на основе другой таблицы - PullRequest
0 голосов
/ 03 мая 2020

У меня есть таблица с именем Product, а ее данные и структура таблицы выглядят примерно так:

+-----------+-------------+-----------+
| ProductId | ProductName | SortValue |
+-----------+-------------+-----------+
| 1157      | ABC         | 7         |
+-----------+-------------+-----------+
| 1156      | DEF         | 3         |
+-----------+-------------+-----------+
| 1155      | GHI         | 4         |
+-----------+-------------+-----------+
| 1154      | JKL         | 2         |
+-----------+-------------+-----------+
| 1153      | MNO         | 1         |
+-----------+-------------+-----------+
| 1152      | PQR         | 5         |
+-----------+-------------+-----------+
| 1151      | STU         | 6         |
+-----------+-------------+-----------+

У меня есть еще одна таблица с именем LocationProdut, которая является справочной таблицей продуктов и таблицей местоположений для каждое местоположение productid имеет свое собственное значение сортировки. Пример данных и структура таблицы следующие:

+--------------+-------------+-----------+
| fkLocationId | fkProductId | Sortvalue |
+--------------+-------------+-----------+
| 19           | 1157        | 1         |
+--------------+-------------+-----------+
| 19           | 1156        | 2         |
+--------------+-------------+-----------+
| 19           | 1155        | 3         |
+--------------+-------------+-----------+
| 19           | 1154        | 4         |
+--------------+-------------+-----------+
| 19           | 1153        | 5         |
+--------------+-------------+-----------+
| 19           | 1152        | 6         |
+--------------+-------------+-----------+
| 19           | 1151        | 7         |
+--------------+-------------+-----------+
| 20           | 1155        | 3         |
+--------------+-------------+-----------+
| 20           | 1154        | 4         |
+--------------+-------------+-----------+
| 20           | 1153        | 5         |
+--------------+-------------+-----------+
| 20           | 1152        | 6         |
+--------------+-------------+-----------+
| 20           | 1151        | 7         |
+--------------+-------------+-----------+
| 21           | 1155        | 3         |
+--------------+-------------+-----------+
| 21           | 1154        | 4         |
+--------------+-------------+-----------+
| 21           | 1153        | 5         |
+--------------+-------------+-----------+
| 21           | 1152        | 6         |
+--------------+-------------+-----------+
| 21           | 1151        | 7         |
+--------------+-------------+-----------+

Теперь мне нужно обновить SortValue coulmn в таблице LocationProdut, чтобы Product SortValue таблицы только для fkLocationId = 19 & 20

Ожидаемый результат выглядит следующим образом.

+------------+-------------+-----------+
| fkBranchId | fkServiceId | Sortvalue |
+------------+-------------+-----------+
| 19         | 1157        | 7         |
+------------+-------------+-----------+
| 19         | 1156        | 3         |
+------------+-------------+-----------+
| 19         | 1155        | 4         |
+------------+-------------+-----------+
| 19         | 1154        | 2         |
+------------+-------------+-----------+
| 19         | 1153        | 1         |
+------------+-------------+-----------+
| 19         | 1152        | 5         |
+------------+-------------+-----------+
| 19         | 1151        | 6         |
+------------+-------------+-----------+
| 20         | 1155        | 4         |
+------------+-------------+-----------+
| 20         | 1154        | 2         |
+------------+-------------+-----------+
| 20         | 1153        | 1         |
+------------+-------------+-----------+
| 20         | 1152        | 5         |
+------------+-------------+-----------+
| 20         | 1151        | 6         |
+------------+-------------+-----------+
| 21         | 1155        | 3         |
+------------+-------------+-----------+
| 21         | 1154        | 4         |
+------------+-------------+-----------+
| 21         | 1153        | 5         |
+------------+-------------+-----------+
| 21         | 1152        | 6         |
+------------+-------------+-----------+
| 21         | 1151        | 7         |
+------------+-------------+-----------+

Ответы [ 2 ]

2 голосов
/ 03 мая 2020

Вы можете использовать простой inner join для обновления необходимых строк:

UPDATE LP
  SET 
      LP.Sortvalue = P.SortValue
FROM LocationProduct LP
JOIN Product P ON LP.fkProductId = P.ProductId
WHERE fkLocationId IN(19, 20);

Пожалуйста, найдите здесь db <> fiddle .

1 голос
/ 03 мая 2020
UPDATE        targetTable
SET           targetTable.targetColumn = s.sourceColumn
FROM          targetTable t
INNER JOIN    sourceTable s
ON            t.matchingColumn = s.matchingColumn
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...