سؤال

ولدي جدولين مع نفس الأعمدة

tbl_source (ID, Title)

tbl_dest (ID, Title)

وأريد تحديث tbl_dest عناوين من tbl_source حيث معرفات في دست ومصدر المباراة. ومع ذلك، لا أريد لتحديث عنوان دست إذا كان عنوان المصدر هو فارغة (أو فارغة).

ولقد حصلت على هذا:

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 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 <> ''

نصائح أخرى

وانها لتعيين القيمة إلى باطل لأن فرعي تعود لاغية، وكنت لا تصفية السجلات في بند التحديث.

وحاول شيئا من هذا القبيل بدلا من ذلك:

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