2012-06-06 247 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

相關問題