2012-06-06 58 views
1

我试图创建一个T-SQL查询几个小时。谷歌和论坛搜索没有帮助,所以我希望有人可以帮助我。有ChangeJournal两个表格。 Change中的每一行都有Journal中的5个相关行。将列值从一个表复制到另一个表

我想要做的是将Journal中特定相关行的列值(CreatedDateTime)复制到Change的列AuthorizationDate。这应该为Change中的所有行完成。

这是我到目前为止已经取得的成就:

UPDATE Change 
SET Change.ap_ITSM_MDP_AuthorizationDate = 
    (SELECT Journal.CreatedDateTime 
     FROM Journal 
     JOIN Change 
      ON Journal.Parentlink_RecID = Change.RecID 
     WHERE ITSM_ChangeNotes_Subject = 'Status changed to: Authorized' 
     AND Change.RecID = Journal.ParentLink_RecID 
    ) 

不幸的是,我得到了以下错误消息:

消息512,级别16,状态1,行 子查询返回超过1个值。当子查询遵循=,!=,<,< =,>,> =或当子查询用作表达式时,这是不允许的。 该声明已被终止。

我以为我DID限制结果为WHERE子句(ChangeNotes_Subject = '...')。我做错了什么?

+0

这是用于SQL服务器吗? –

回答

3

我认为这将工作:

UPDATE Change 
SET Change.ap_ITSM_MDP_AuthorizationDate = 
    (SELECT Journal.CreatedDateTime 
     FROM Journal 
     WHERE ITSM_ChangeNotes_Subject = 'Status changed to: Authorized' 
     AND Change.RecID = Journal.ParentLink_RecID 
    ) ; 

但使用JOIN更好 - 为了避免任何不必要的更新。具体方法如下:

UPDATE Change 
SET Change.ap_ITSM_MDP_AuthorizationDate = Journal.CreatedDateTime 
FROM Journal 
    JOIN Change 
    ON Change.RecID = Journal.ParentLink_RecID 
WHERE ITSM_ChangeNotes_Subject = 'Status changed to: Authorized' ; 
+1

哇,非常感谢,帮助! 似乎有时少代码更好;) – shokked

1

正如你所说,你的日志有五个条目的更改的一个......在你的子查询中使用top 1或max来证明你可以做这个工作。然后,您必须考虑哪些日记条目需要使用日期时间,并更改您的子选择才能选择该日期时间。

哦,你的“where”子句重复你的连接,丢弃该部分。此外,哪个表是“ITSM_ChangeNotes_Subject”,如果它位于Change中,这可能是您在返回的日记行中看到重复项的原因。

使用示例更改ID运行子查询以查看您是否确实正在为搜索字符串获取重复行。

+0

感谢您的回复! 我GOOGLE搜索限制结果的可能性,但只发现“LIMIT”似乎只适用于MySQL ... 我会尝试一下 ITSM_ChangeNotes_Subject是“日记”表的一部分。总是只有一个具有该特定主题的日记条目。 我已经使用单个更改运行了我的查询,但它确实有效,但将与该更改相关的日记帐分录的值放入所有更改中。 非常感谢您的回答。这有助于像我这样的新手更好地理解SQL;) – shokked

+0

@ user136868没问题,我很高兴有帮助:) –

0
UPDATE Change 
SET Change.ap_ITSM_MDP_AuthorizationDate = 
    (SELECT TOP 1 Journal.CreatedDateTime 
     FROM Journal 
     JOIN Change 
      ON Journal.Parentlink_RecID = Change.RecID 
     WHERE ITSM_ChangeNotes_Subject = 'Status changed to: Authorized' 
     AND Change.RecID = Journal.ParentLink_RecID 
    ) 

注:请小心使用此查询,因为子查询将返回唯一一个由你的预期或没有行,那我还有怀疑。

+0

你好DynamicVariable, 谢谢你,ypercube的解决方案为我工作,但我会尝试你的,也:) – shokked

相关问题