Обновление таблицы БД, исключая NULL - PullRequest
0 голосов
/ 16 января 2009

У меня две таблицы с одинаковыми столбцами

tbl_source (ID, Title)

tbl_dest (ID, Title)

Я хочу обновить заголовки tbl_dest из источника tbl_s, где идентификаторы в 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.

Спасибо.

Ответы [ 3 ]

5 голосов
/ 16 января 2009

Использовать внутреннее соединение ...

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 <> ''
0 голосов
/ 16 января 2009

Это потому, что внешний запрос обновляет каждую запись (без предложения 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)
0 голосов
/ 16 января 2009

Он устанавливает значение NULL, поскольку подзапрос возвращает значение NULL, а вы не фильтруете записи в своем предложении обновления.

Попробуйте что-то вроде этого:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...