我正在运行一个查询,该查询从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表?
答案 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;