Обновление таблицы базы данных, исключающей нули
-
19-08-2019 - |
Вопрос
У меня есть две таблицы с одинаковыми столбцами
tbl_source (ID, Title)
tbl_dest (ID, Title)
Я хочу обновить заголовки tbl_dest из tbl_source, где идентификаторы в dest и source совпадают.Однако я не хочу обновлять заголовок dest, если исходный заголовок равен нулю (или пуст).
У меня есть это:
UPDATE tbl_dest
SET tbl_dest.Title =
(SELECT title
FROM tbl_source
WHERE tbl_dest.id = tbl_source.ID and tbl_source.title is not null)
Но он продолжает вставлять нули.
Как бы я построил такой запрос?
Я использую SQL server 2005.
Спасибо.
Решение
Используйте внутреннее соединение...
Update tbl_dest
Set tbl_dest.Title = tbl_source.Title
From tbl_dest inner join tbl_source on tbl_dest.ID = tbl_source.ID
Where tbl_source.Title is not null and tbl_source.Title <> ''
Другие советы
Он устанавливает значение в null, потому что подзапрос возвращает null, и вы не фильтруете записи в своем предложении update .
Попробуйте вместо этого что-то вроде этого:
UPDATE tbl_dest
SET tbl_dest.Title =
(SELECT title
FROM tbl_source
WHERE tbl_source.id = tbl_dest.id)
WHERE EXISTS
(SELECT 1
FROM tbl_source
WHERE tbl_source.id = tbl_dest.id
AND tbl_source.title IS NOT NULL)
Это потому, что внешний запрос обновляет каждую запись (без предложения WHERE), поэтому, когда внутренний запрос не находит соответствующей записи, вставляется NULL .
Добавьте предложение WHERE во внешний запрос, чтобы не выполнять обновление этих записей:
UPDATE tbl_dest
SET tbl_dest.Title =
(SELECT title
FROM tbl_source
WHERE tbl_dest.id = tbl_source.ID and tbl_source.title is not null)
WHERE EXISTS
(SELECT title
FROM tbl_source
WHERE tbl_dest.id = tbl_source.ID and tbl_source.title is not null)