كيف يمكنني تحديث هذا المجال في قاعدة بيانات SQL بلدي؟

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

  •  21-08-2019
  •  | 
  •  

سؤال

ولدي جدولين.

BoardPosts
BoardPostId INT PK
ModifiedOn DATETIME NULLABLE

BoardComments
BoardCommentId INT PK
BoardPostId INT
CreatedOn DATETIME

وظيفة مجلس ديها صفر إلى العديد من التعليقات.

وأود أن تعيين الحقل ModifiedOn أن يكون تاريخ التعليق الأخير، إذا كان المجلس لديه تعليق. خلاف ذلك، مجرد ترك الأمر لاغيا.

وكيف أفعل هذا، وذلك باستخدام TSQL؟

وشيء من هذا القبيل ...

UPDATE BoardPosts
SET ModifiedOn = CreatedOn
SELECT TOP(1) CreatedOn
FROM BoardPosts a INNER JOIN BoardComments b ON a.BoardPostId = b.BoardPostId

و؟؟؟

هل كانت مفيدة؟

المحلول

وأعتقد أن هذا سوف يعمل ...

UPDATE BoardPosts
SET ModifiedOn = (SELECT MAX(CreatedOn) 
                  FROM BoardComments 
                  WHERE BoardComments.BoardPostId = BoardPosts.BoardPostId)

نصائح أخرى

وقررت أن تأخذ في الاعتبار كلا من المشاركات علق وuncommented:

update p1 set ModifiedOn = (
select
    max(case when c.CreatedOn is null then p.CreatedOn
    else c.CreatedOn end) as ModDate
from 
    boardposts p
    left outer join BoardComments c on
        p.BoardPostId = c.BoardPostId
where
    p.BoardPostId = p1.BoardPostId
group by p.BoardPostId
)
from
    BoardPosts p1

وآمل أن يساعد هذا!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top