更新另一个表中缺少记录的表

时间:2009-07-07 03:24:55

标签: sql-server tsql

我正在运行一个查询,该查询从EXCEPT的LEFT返回不在正确查询中的记录;

USE AdventureWorks;
GO
SELECT ProductID 
FROM Production.Product
EXCEPT
SELECT ProductID 
FROM Production.WorkOrder;

假设返回了6条记录(Production.Product表中有6条记录,不在Production.WorkOrder中)

如何编写查询以将6条记录更新为Production.WorkOrder表?

3 个答案:

答案 0 :(得分:3)

insert into workorder (productid)
select productid from product where productid not in (select productid from workorder)

这会将产品表中尚未处于工作状态的所有productid插入到工作订单中。

答案 1 :(得分:0)

我会使用左连接,如下所示:

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;

这将返回Product中未出现在WorkOrder中的所有ProductID值。另一个答案(WHERE NOT IN)的问题是子查询将执行一次/行,如果表很大,这将非常慢。 LEFT JOIN只执行一次,然后SQL将匹配行 - 在一个小表上,在实践中没有太大的区别,但在更大的表或生产数据库中,差异将是巨大的。< / p>

答案 2 :(得分:0)

只需将您的查询转换为INSERT?

INSERT INTO Production.WorkOrder(ProductID, ...)
SELECT ProductID, ...
FROM Production.Product
EXCEPT
SELECT ProductID 
FROM Production.WorkOrder;