2016-03-10 99 views
1
UPDATE main 
SET main.PCH_2YR = 
(SELECT TOP 1 sub.PCH_2YR FROM [dbGlobalPricingMatrix].[dbo].[tblPCHLookup_Test] sub WHERE 
sub.capid = main.capid AND 
sub.milespa = main.mileage AND 
sub.maintained = main.maintenance AND sub.pch_2yr IS NOT NULL) 
FROM [dbWebsiteLO3-PRICING]..Vehicles_Staging_Data main 

我只想設置值,如果子查詢返回的值不是NULL。我怎樣才能做到這一點?僅當非null時更新SQL語句

只有一行匹配條件,但我只想使用它的值,如果它不是NULL。

+0

*請勿將子查詢放在SET子句中,將它放入FROM中並在WHERE中添加適當的過濾器。請注意,子查詢的WHERE本質上是一個「JOIN」 - 4個條件中的3個簡單地加入'main'和'sub'。沒有ORDER BY的BTW'TOP 1'實際上意味着'隨機選擇一行'。那是你要的嗎? –

+0

我沒有使用ORDER BY,因爲只有一行符合條件,但我只想使用它的值,如果它不是NULL。 – Ben

回答

2

嘗試查詢象下面這樣:

UPDATE main 
SET main.PCH_2YR =sub.PCH_2YR 
FROM [dbWebsiteLO3-PRICING]..Vehicles_Staging_Data main LEFT JOIN 
[dbGlobalPricingMatrix].[dbo].[tblPCHLookup_Test] sub ON 
sub.capid = main.capid AND 
sub.milespa = main.mileage AND 
sub.maintained = main.maintenance AND sub.pch_2yr IS NOT NULL 
WHERE sub.PCH_2YR is NOT NULL 
0

你可以只在桌子上,而不是子查詢做一個INNER JOININNER JOIN s過濾掉其他表中沒有匹配的記錄。

UPDATE main 
SET main.PCH_2YR = sub.PCH_2YR 
FROM [dbWebsiteLO3-PRICING]..Vehicles_Staging_Data main 
INNER JOIN [dbGlobalPricingMatrix].[dbo].[tblPCHLookup_Test] sub 
     ON sub.capid = main.capid 
     AND sub.milespa = main.mileage 
     AND sub.maintained = main.maintenance 
     AND sub.pch_2yr IS NOT NULL