Sql 用于从同一表更新同一表中的列的查询

Sql 用于从同一表更新同一表中的列的查询,sql,sql-server,tsql,Sql,Sql Server,Tsql,我必须更新匹配的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.documentnod

我必须更新匹配的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与下面查询的作者id不同 我想让它同步

select authorid from wv_blogdata 
inner join CMS_Document 
on wv_blogdata.BlogDataID = CMS_Document.DocumentForeignKeyValue
Where DocumentCulture ='en-US'

正如Zohar Peled在评论中所说,除非你给出样本数据、预期结果以及你当前的DML,否则很难对你的问题给出准确的答案

也就是说,一般来说,如果可以使用表别名生成select语句,该语句同时显示要更新的字段和具有新值的字段,则可以将其用作成功更新查询的基础

因此,如果此查询中显示了正确的结果(将原始结果转换为SELECT):

您将从此查询中获得正确的结果(您的原始结果):

当然要记住测试你的工作是否有意外的结果和隐藏的陷阱

同样,如果没有足够的样本数据,很难给您一个明确的答案,因此请尽可能多地提供详细信息,以帮助我们帮助您


希望这能帮助您解决问题。

以下查询应使记录同步,以便在您运行此查询后,德国博客的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';

假设我了解数据结构,尝试将
和t1.DocumentCulture='el-GR'
添加到update语句的where子句中。您可以发布完整的查询吗?如果您可以编辑问题,将示例数据作为ddl+dml和所需结果,我可以编写一个完整的、可测试的查询。@SmartestVEGA,请检查我刚刚发布的答案ed.应该可以。如果您看到任何问题,请告诉我。文档区域性在CMS_document Table中。美国blog authorid设置为german blog authorid。这不是您想要的结果吗?对于不同的DocumentForeignKeyValue,同一区域性有多个autor id,因此它应该与wv_blogdata.BlogDataID=document.DocumentForeignKeyValue匹配。然后,add在子查询中有一个额外的条件。我会在某个时候更新它。
    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';
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';