我必须更新匹配的authorid列(其中documentculture ='en-US'
匹配(其中documentculture ='el-GR'在同一个表中。其中包括内部联接到另一个表
我写得如下,看起来不对:
UPDATE t1
SET t1.authorid = t2.authorid
FROM wv_blogdata AS t1
INNER JOIN wv_blogdata AS t2
ON t1.documentnodeid = t2.documentnodeid
inner join CMS_Document d
ON d.BlogDataID = d.DocumentForeignKeyValue
WHERE t2.DocumentCulture = 'en-US';
你能纠正我吗?
更多解释:
select authorid from wv_blogdata
inner join CMS_Document
on wv_blogdata.BlogDataID = CMS_Document.DocumentForeignKeyValue
Where DocumentCulture ='el-GR'
上述查询的作者ID与以下查询的authorid不同 我想让它同步
select authorid from wv_blogdata
inner join CMS_Document
on wv_blogdata.BlogDataID = CMS_Document.DocumentForeignKeyValue
Where DocumentCulture ='en-US'
答案 0 :(得分:0)
正如Zohar Peled在评论中所说,除非您提供样本数据,预期结果以及您当前的DML,否则很难对您的问题做出准确答案。
话虽如此,一般而言,如果您可以使用表别名显示要更新的字段和带有新值的字段的select语句,那么您可以将其用作成功更新查询的基础。 / p>
因此,如果此查询中显示了正确的结果(原始转换为SELECT):
SELECT t1.authorid AS OldValue, t2.authorid AS NewValue
FROM wv_blogdata AS t1
INNER JOIN wv_blogdata AS t2
ON t1.documentnodeid = t2.documentnodeid
INNER JOIN CMS_Document d
ON d.BlogDataID = d.DocumentForeignKeyValue
WHERE t2.DocumentCulture = 'en-US';
您将从此查询(原始版本)中获得正确的结果:
UPDATE t1
SET t1.authorid = t2.authorid
FROM wv_blogdata AS t1
INNER JOIN wv_blogdata AS t2
ON t1.documentnodeid = t2.documentnodeid
INNER JOIN CMS_Document d
ON d.BlogDataID = d.DocumentForeignKeyValue
WHERE t2.DocumentCulture = 'en-US';
记住当然要测试你的工作是否有意外的结果和隐藏的陷阱。
如果没有足够的样本数据,很难给出明确的答案,因此请尽可能详细地提供帮助以帮助您。
希望这可以帮助您解决问题。
答案 1 :(得分:0)
以下查询应使记录同步,以便在运行此查询后,德国博客和美国博客的authorid的authorid将变为相同。
请注意,top(1)
是必需的,因此子查询只返回一个值,否则如果德国文化有多个博客记录,您将遇到错误。
UPDATE b
SET b.authorid =
(SELECT top(1) wvb.authorid
FROM wv_blogdata wvb
INNER JOIN CMS_Document cms ON wvb.BlogDataID = cms.DocumentForeignKeyValue
WHERE cms.DocumentCulture ='el-GR' AND b.BlogDataID = cms.DocumentForeignKeyValue order by wvb.authorid)
FROM wv_blogdata b
INNER JOIN CMS_Document ON b.BlogDataID = CMS_Document.DocumentForeignKeyValue
WHERE CMS_Document.DocumentCulture ='en-US';