Sql server 更新另一个表中缺少记录的表
我正在运行一个查询,该查询将返回除不在右侧查询之外的其他记录Sql server 更新另一个表中缺少记录的表,sql-server,tsql,Sql Server,Tsql,我正在运行一个查询,该查询将返回除不在右侧查询之外的其他记录 USE AdventureWorks; GO SELECT ProductID FROM Production.Product EXCEPT SELECT ProductID FROM Production.WorkOrder; 假设有6条记录返回。有6条记录在Production.Product表中,但不在Production.WorkOrder中 如何编写查询以将6条记录更新到Production.WorkOrder表中 i
USE AdventureWorks;
GO
SELECT ProductID
FROM Production.Product
EXCEPT
SELECT ProductID
FROM Production.WorkOrder;
假设有6条记录返回。有6条记录在Production.Product表中,但不在Production.WorkOrder中
如何编写查询以将6条记录更新到Production.WorkOrder表中
insert into workorder (productid)
select productid from product where productid not in (select productid from workorder)
这将在workorder中插入产品表中尚未在workorder中的所有productid
这将在workorder中插入product表中尚未在workorder中的所有productid。我将使用左联接,如下所示:
USE AdventureWorks;
GO
SELECT p.ProductID
FROM Production.Product p
LEFT
JOIN Production.WorkOrder wo
ON p.ProductID = wo.ProductID
WHERE wo.ProductID IS NULL;
这将返回产品中未出现在WorkOrder中的所有ProductID值。另一个答案的问题是,子查询将每行执行一次,如果表很大,则执行速度会非常慢。左连接只执行一次,然后SQL将匹配行-在一个小表上,实际上不会有太大差异,但在一个较大的表或生产数据库中,差异将是巨大的。我会使用左连接,如下所示:
USE AdventureWorks;
GO
SELECT p.ProductID
FROM Production.Product p
LEFT
JOIN Production.WorkOrder wo
ON p.ProductID = wo.ProductID
WHERE wo.ProductID IS NULL;
这将返回产品中未出现在WorkOrder中的所有ProductID值。另一个答案的问题是,子查询将每行执行一次,如果表很大,则执行速度会非常慢。左连接只执行一次,然后SQL将匹配行-在一个小表上,实际上不会有太大差异,但在一个较大的表或生产数据库中,差异将是巨大的。只需将查询转换为插入
INSERT INTO Production.WorkOrder(ProductID, ...)
SELECT ProductID, ...
FROM Production.Product
EXCEPT
SELECT ProductID
FROM Production.WorkOrder;
只需将您的查询转换为插入
INSERT INTO Production.WorkOrder(ProductID, ...)
SELECT ProductID, ...
FROM Production.Product
EXCEPT
SELECT ProductID
FROM Production.WorkOrder;
我发誓,总有一天我会第一次用语法正确的代码回复。干杯,斯托博尔。如果子查询中有可能出现空值,请不要从workorder中选择productid,而是使用从workorder中选择productid,其中productid不为空。我发誓,总有一天我会用第一次语法正确的代码回复。干杯,斯托博尔。如果子查询中有可能出现null,请使用select productid from workorder,而不是从workorder中选择productid,其中productid不为null