SQL 从哪里查询更新

SQL Update From Where Query

我有 2 个 table 里面有信息。当 ClientUID 和 DeviceID 匹配以及 A_DEV_SUBSTVAR_VALUE table = 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

试试

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';

注意,你应该尽量避免在你的 were 子句中写 select 语句,因为它是 运行 for ever row 返回。这可能是一个很大的性能损失。

应该可以。

我总是先在两个 table 之间写一个连接,以并排获得我想要的行,并确保我的 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(产品)table,因此没有歧义。您仍然必须在等号右侧为价格添加别名,因为它可能是来自 p(产品)或 n(新价格)table.

的字段

如果您的 SQL 引擎支持,您也可以使用 CTE(通用 Table 表达式):

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