来自Where Query的SQL更新

时间:2015-04-22 19:58:04

标签: sql-update

我有2个包含信息的表格。当ClientUID和DeviceID匹配时,我需要使用A_DEV_SUBSTVAR_VALUE表的SubstVarValue列中的值更新表A_CLIENT中的SelfServiceUserName列,并使用A_DEV_SUBSTVAR_VALUE表中的SubstVarName = samaccount名称。这是我试图运行的查询,但我一直收到错误:

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

2 个答案:

答案 0 :(得分: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';

注意,您应该尝试避免在您的was子句中编写select语句,因为它是为返回的行运行的。这可能是一个巨大的性能影响。

这应该有效。

答案 1 :(得分: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

请注意,您不要在SET子句左侧使用Price,因为它必须来自p(Product)表,因此不存在歧义。您仍必须在等于右侧的价格别名,因为它可能是来自p(产品)或n(NewPrice)表的字段。

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

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