Aktualisieren einer DB-Tabelle ohne NULLs
-
19-08-2019 - |
Frage
Ich habe zwei Tabellen mit den gleichen Spalten
tbl_source (ID, Title)
tbl_dest (ID, Title)
Ich möchte tbl_dest Titel aus dem tbl_source wo die IDs in dest und Quellanpassungs- aktualisieren. Aber ich will nicht den Titel dest aktualisieren, wenn der Quellentitel ist null (oder leer).
Ich habe diese:
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)
Aber es hält die NULL-Werte eingefügt wird.
Wie würde ich eine solche Abfrage erstellen?
Ich bin mit SQL Server 2005.
Danke.
Lösung
Verwenden Sie eine innere Verknüpfung ...
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 <> ''
Andere Tipps
Es ist der Wert auf null einstellen, weil die Unterabfrage null zurückkehrt, und Sie sind nicht filtern Datensätze in der Update-Klausel.
Versuchen Sie so etwas wie diese stattdessen:
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)
Das ist, weil die äußere Abfrage jeden Datensatz aktualisiert wird (keine WHERE-Klausel), wenn so die innere Abfrage keinen passenden Datensatz findet, wird NULL eingefügt.
In der äußeren Abfrage eine WHERE-Klausel nicht auf die Datensätze ein Update tun:
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)