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

仅当select不返回null时更新SQL记录,sql,select,sql-update,Sql,Select,Sql Update,我有一个客户及其父客户的SQL表,需要更新客户表以显示客户所有者(这是客户表中的另一个条目)。i、 e客户可以自己存在,也可以(可选)在同一个表中有父记录。我尝试过使用SQL命令 Update Customers SET Customers.Owner = (SELECT TOP 1 Owner from Customers Customer where CustomerId = Customers.Parent) 但如果没有父对象,则会将所有者设置为null。如何仅在Select语

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

Update 
  Customers
SET
  Customers.Owner = (SELECT TOP 1 Owner from Customers Customer where CustomerId = Customers.Parent)
但如果没有父对象,则会将所有者设置为null。如何仅在Select语句不返回null时更新记录。我尝试添加where子句,但这似乎只作用于select子句,而不作用于其结果。

您可以使用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)
您可以使用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)

您也可以使用
MERGE
语句

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

您也可以使用
MERGE
语句

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

TOP 1
EXISTS
中不需要,但无论如何都会工作。
TOP 1
EXISTS
中不需要,但无论如何都会工作。完美-正是我想要的。谢谢。太好了——正是我想要的。谢谢