[英]SQL How do i update like this?
我正在嘗試更新[Temp_LTGData]表中的所有SQL行,將[CORP_REG_NO]值設置為與[CUSTOMER_NUMBER]匹配的同一表中另一行的值。
最終,我需要用很多列來做到這一點,有人知道這是否可以完成嗎?
我似乎無法像選擇查詢中那樣使用LTGSource別名:(
Update [MandS].[dbo].[Temp_LTGData] LTGSource
Set [CORP_REG_NO] = (SELECT [CORP_REG_NO]
FROM [MandS].[dbo].[Temp_LTGData]
WHERE ([CORP_REG_NO] IS NULL
AND [CUSTOMER_NUMBER] = LTGSource.[CUSTOMER_NUMBER] ))
where [CORP_REG_NO] IS NULL
感謝您提供的反饋,這些反饋確實很棒,我什至學會了一些解決此問題的方法(為大家投票)。
嘗試以下操作以確切地了解您的工作
UDPATE [MandS].[dbo].[Temp_LTGData] LTGSource
SET [CORP_REG_NO] = (SELECT [CORP_REG_NO]
FROM [MandS].[dbo].[Temp_LTGData]
WHERE ([CORP_REG_NO] IS NULL
AND [CUSTOMER_NUMBER] = ToUpdate.[CUSTOMER_NUMBER] ))
FROM {MandS].[dbo].[Temp_LTGData] ToUpdate
where [CORP_REG_NO] IS NULL
但是,您在查詢中有一個錯誤,我相信子查詢應該是IS NOT NULL。
這樣的事情將使您能夠處理帶有源行和目標行的許多列
如果您需要為不同的列鏈接不同的行,那么它會更復雜
如果我理解正確,那么過濾到CORP_REG_NO IS NULL
只會對CORP_REG_NO起作用,因此您不想進行過濾,只能根據您的問題將目標和源行限制為獨立於特定的列過濾器。
Update
target
Set
[CORP_REG_NO] = CASE WHEN target.[CORP_REG_NO] IS NULL THEN source.[CORP_REG_NO] ELSE target.[CORP_REG_NO] END,
...and again...
FROM
[MandS].[dbo].[Temp_LTGData] target
JOIN
[MandS].[dbo].[Temp_LTGData] source ON target.[CUSTOMER_NUMBER] = source.[CUSTOMER_NUMBER]
WHERE
a filter to restrict rows perhaps
嘗試這個:
UPDATE Temp_LTGData LTGSource
SET Col1 = L2.Col1, Col2 = L2.Col2, Col3 = L2.Col3
FROM LTGSource L1
JOIN LTGSource L2 ON L2.CORP_REG_NO IS NOT NULL AND L1.CUSTOMER_NUMBER = L2.CUSTOMER_NUMBER
WHERE L1.CORP_REG_NO IS NULL
那應該為你做。 您正在將可更新表聯接到自身,因此可以訪問更新的舊行和新行。 這樣,您可以一次更新多個列。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.