这是SQL查询:
MERGE tblProductsSold
USING tblOrders on tblOrders.OrderID = tblProductsSold.txtOrderID
WHEN NOT MATCHED THEN
Insert ( txtOrderID, txtOrderdate, txtPartno, txtQty)
values
(SELECT tblItemsOnOrder.txtOrderID,
tblOrders.txtDateTime,
tblItemsOnOrder.txtPartNO,
tblItemsOnOrder.txtQTY
FROM tblOrders INNER JOIN tblItemsOnOrder
ON tblOrders.OrderID = tblItemsOnOrder.txtOrderID
WHERE tblOrders.txtIsConfirmed = '1'
)
OUTPUT $action ;
所需结果:需要导入Products
表中尚未包含tblProductsSold
的订单
答案 0 :(得分:7)
你不能像现在这样做而接近它。
MERGE
语句合并两个表 - 您在标题中定义的两个表 - 源表和目标表。
目前,您使用tblOrders
作为来源,tblProducts
作为目标。仅此一点似乎很奇怪 - 您正在尝试将订单合并到产品中?似乎不太合适...
一旦定义了源表和目标表,您就可以比较来自源的哪些行(或不存在)。如果源中的给定行不在目标中 - 那么您可以将其值插入目标表中。
但仅适用于源表中的直接列值!当你想要做的时候,你不能出去做子查询到其他表格!
所以我相信你真正应该做的是:
作为来源 - 有一个列出订单中找到的产品的视图 - 产品(不是订单本身)
< / LI>然后将您的Products
表与此视图进行比较 - 如果您的订单恰好有基本Products
表中没有的任何产品 - 请插入它们。
所以你需要这样的东西:
MERGE tblProductsSold AS Target
USING (SELECT tblItemsOnOrder.txtOrderID, tblOrders.txtDateTime,
tblItemsOnOrder.txtPartNO, tblItemsOnOrder.txtQty
FROM tblOrders
INNER JOIN tblItemsOnOrder ON tblOrders.OrderID = tblItemsOnOrder.txtOrderID
WHERE tblOrders.txtIsConfirmed = '1') AS Source
ON Source.OrderID = Target.txtOrderID
WHEN NOT MATCHED THEN
INSERT (txtOrderID, txtOrderdate, txtPartno, txtQty)
VALUES (Source.OrderID, Source.txtDateTime, Source.txtPartNo, Source.txtQty)
OUTPUT $action ;