2015-04-22 40 views
0

我有2個表中包含信息。當ClientUID和DeviceID匹配並且A_DEV_SUBSTVAR_VALUE表中的SubstVarName = samaccount名稱時,我需要使用A_DEV_SUBSTVAR_VALUE表的SubstVarValue列中的值更新表A_CLIENT中的SelfServiceUserName列。這裏是我試圖運行查詢,但我不斷收到錯誤:從哪裏查詢的SQL更新

UPDATE A_CLIENT 
SET SelfServiceUserName = (SELECT SubstVarValue 
    FROM A_DEV_SUBSTVAR_VALUE 
    WHERE A_DEV_SUBSTVAR_VALUE.SubstVarName = 'samaccountname') 
    WHERE A_CLIENT.ClientUID = A_DEV_SUBSTVAR_VALUE.DeviceID 
+1

寫你的錯誤 –

+0

可能重複[SQL更新從一個表到另一個根據ID匹配( http://stackoverflow.com/questions/224732/sql-update-from-one-table-to-another-based-on-a-id-match) –

回答

0

嘗試像

update a_client c 
inner join a_dev_substvar_value d on 
    c.clientuid = d.deviceid 
set 
    c.selfserviceusername = d.substvarvalue 
where 
    d.substvarname = 'samaccountname'; 

注意,你應該嘗試,因爲它是運行避免寫你是子句中的SELECT語句永遠行返回。這可能是一個很大的表現。

這應該工作。

+0

另一點是看你的聯接條款應該'clientuid = deviceid '?聽起來像那裏可能有不正確的東西。 –

+0

謝謝。你讓我走上正軌。我只需要對INNER JOIN語法進行一些更改。 – James

0

我總是先寫兩個表之間的連接,以獲得我想要的並排行,並確保JOIN子句正確。

SELECT p.ProductID, p.ProductName, p.Price AS OldPrice, n.Price as NewPrice 
FROM Products as p 
JOIN NewPrices as n on p.ProductID = n.ProductID 

一旦我這樣做,是很容易通過與UPDATE和SET更換SELECT子句,改變成一個更新語句:

UPDATE p 
SET Price = n.Price 
FROM Products as p 
JOIN NewPrices as n on p.ProductID = n.ProductID 

注意你不別名左側的價格因爲它必然來自p(Product)表,所以不存在歧義。您仍然必須在等號右邊將價格別名,因爲它可能是來自p(Product)或n(NewPrice)表的字段。

你也可以使用一個CTE(公共表表達式),如果你的SQL引擎支持它:

WITH x AS (
SELECT p.ProductID, p.ProductName, p.Price AS OldPrice, n.Price as NewPrice 
FROM Products as p 
JOIN NewPrices as n on p.ProductID = n.ProductID 
) 
UPDATE x set OldPrice = NewPrice