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.

War es hilfreich?

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top