Обновление таблицы базы данных, исключающей нули

StackOverflow https://stackoverflow.com/questions/451829

  •  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)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top