我有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
答案 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