Понастоящем в моя набор от данни има конкретно поле, където някои от записите нямат стойности; полето е разрешено да бъде NULL в схемата.
Понякога обаче тези данни се попълват в други записи в базата данни въз основа на идентификационния номер.
Бих искал да стартирам заявка за актуализиране на тези NULLполета със съответните стойности въз основа на съдържанието на останалата част от базата данни. Да приемем, че никога няма да има противоречащи си стойности за тези полета.
Например:
ID Identifier Address Name OrderID
123 23 Sheppard Court David 465464322
456 100100100100 29 Milestone Cres Terry 651654986
789 200200200200 102 Dynamo Drive Joseph 397431357
123 300300300300 23 Sheppard Court David 516198532
Записите в горния пример са уникални, но полето "Идентификатор" не е попълнено за първия ред.
Бих искал да стартирам заявка, която ще ми позволи бързо да актуализирам това липсващо поле със съответната стойност, т.е. 300300300300 в този случай.
Отговори:
1 за отговор № 1Да приемем, че никога няма да има противоречащи си стойности за тези полета.
Ако това е валидно предположение, това е най-простото решение (ако се приеме, че ID е основният ключ, който планирате да използвате за запълване на стойностите):
UPDATE tableName a
SET identifier = (
SELECT distinct identifier
FROM tableName b
WHERE a.id = b.id
AND identifier IS NOT NULL)
WHERE identifier IS NULL
Можете да получите фермер с MERGE INTO
синтаксис, но не съм сигурен дали това е достъпно за достъп.
0 за отговор № 2
Актуализира всичките ви липсващи идентификатори.
UPDATE yourTable t1
SET t1.Identifier =
(SELECT TOP 1 Identifier FROM yourTable
WHERE t1.Identifier IS NOT NULL)
WHERE t1.Identifier IS NULL
Sidenote: Как е възможно да имате такива объркани данни? Обикновено трябва никога трябва да пускат такива актуализации във вашата база данни.
Също така имате ли първичен ключ в таблицата си? Защото не мога да видя един и това наистина е трябва да на почти всяка маса.