仅当select不返回null时才更新sql记录

gkl3eglg  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(377)

我有一个客户及其父客户的sql表,需要更新customer表以显示customers owner(这是customer表中的另一个条目)。i、 e客户可以自己存在,也可以(可选)在同一个表中有父记录。我试过使用sql命令

Update 
  Customers
SET
  Customers.Owner = (SELECT TOP 1 Owner from Customers Customer where CustomerId = Customers.Parent)

但如果没有父级,则会将所有者设置为null。如何仅在select语句不返回null时更新记录。我尝试添加一个where子句,但它似乎只作用于select子句,而不作用于它的结果。

sd2nnvve

sd2nnvve1#

您可以使用exist:

Update 
  Customers
SET
  Customers.Owner = (SELECT TOP 1 Owner from Customers Customer 
                     where CustomerId = Customers.Parent)
WHERE EXIST (SELECT TOP 1 Owner from Customers Customer 
             where CustomerId = Customers.Parent)
p1iqtdky

p1iqtdky2#

你可以用 MERGE 声明也是。

MERGE INTO Customers tgt
USING Customers src
ON (src.CustomerId = tgt.Parent)
WHEN MATCHED THEN 
UPDATE tgt.Owner = src.Owner;

相关问题