我有两张桌子
发布
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
和postmeta
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)如果 publishdate 元关键字存在于postmeta表更新帖子的 * dtm_Publishdate * 中,并带有metavalue
2)如果它不存在则用它的createddate更新帖子的dtm_Publishdate
我真的陷入了这种情况。有人可以帮忙吗?
答案 0 :(得分:1)
只要您使用的是SQL Server 2008或更高版本,请使用the MERGE statement。
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类型。
答案 1 :(得分: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