0

我有两张桌子

邮政

int_PostId , dtm_Publishdate               createddate
1             2013-02-07 21:12:03.247
2             2013-03-07 21:12:03.247
3             2013-03-07 21:12:03.247

和后元

int_postmetaid, metakey ,     metavalue ,     int_PostId , int createddate
   1              chk           en                1             2013-02-07  
   2              chk           ps                1             2013-02-07  
   3              chk           cs                1             2013-02-07  
   4             publishdate     2013-03-07       1             2013-02-07
   5              chk           en                2             2013-02-07  
   6              chk           ps                2             2013-02-07  
   7              chk           cs                2             2013-02-07    
   8             publishdate     2013-03-07       2             2013-02-07
   9              chk           en                3             2013-02-07  
   10              chk           ps               3             2013-02-07  
   11              chk           cs               3             2013-02-07  

我想用这些条件更新帖子的 dtm_Publishdate 列。我想在一个查询中完成

1) 如果发布日期元键存在于 postmeta 表中,则更新帖子的*dtm_Publishdate*及其元值

2) 如果它不存在,则使用它的 createddate 更新帖子的 dtm_Publishdate

我真的被这种情况所困扰。有人可以帮忙吗?

4

2 回答 2

1

只要您使用的是 SQL Server 2008 或更高版本,请使用MERGE 语句

MERGE INTO post as Target
USING (SELECT int_PostId,metavalue 
    FROM postmeta 
    WHERE metakey='publishdate') 
    as Source (int_PostId,metavalue)
ON Source.int_PostId = Target.int_PostId
WHEN MATCHED THEN 
    UPDATE SET Target.dtm_Publishdate = Source.metavalue
WHEN NOT MATCHED THEN 
    UPDATE SET Target.dtm_Publishdate = Target.createddate

您可能需要在 WHEN MATCHED 子句中将元值列转换为 DateTime 类型。

于 2013-05-20T15:51:44.680 回答
0

如果 postmeta 中只有一个发布日期行,您可以尝试以下操作:

UPDATE post 
SET dtm_publishdate =
    CASE WHEN pd.metavalue IS NOT NULL
        THEN metavalue
        ELSE createddate
    END
FROM
    post p LEFT OUTER JOIN
    (SELECT
        int_postID, metavalue
    FROM 
        post p INNER JOIN
        postmeta m ON
        p.int_postID = m.int_postID
    WHERE
        metakey = 'publishdate') pd ON
    p.int_postid = pd.int_postID
于 2013-05-20T16:04:35.840 回答