Sql server SQLServer引用外部查询

Sql server SQLServer引用外部查询,sql-server,Sql Server,是否可以在连接上下文中从内部查询引用外部查询?内部查询的“where(sid.ItemID=i.ItemID)”给了我一个错误。我想我以前是这样做的,所以我搜索了我所有存储的进程,但显然我做了某种替代来让它工作。我怀疑我可以删除那一行,它会起作用,但使用内部where子句是否更有效 SELECT departmentName , supplierName , so.SalesOrderID , ss.warehouseInvoiceNo ,

是否可以在连接上下文中从内部查询引用外部查询?内部查询的“where(sid.ItemID=i.ItemID)”给了我一个错误。我想我以前是这样做的,所以我搜索了我所有存储的进程,但显然我做了某种替代来让它工作。我怀疑我可以删除那一行,它会起作用,但使用内部where子句是否更有效

SELECT departmentName
       , supplierName
       , so.SalesOrderID
       , ss.warehouseInvoiceNo
       , ss.transactionNo
       , ss.storeID
       , s.storeName
       , s.storeNo
       , tr.transactionDate
       , p.period
       , sooos.salesOrderID
       , sooos.salesOrderOutOfStockID
       , sooos.itemID
       , i.itemNo
       , i.itemName
       , i.pack
       , i.unitSize
       , quantity
       , wi.available
FROM   SalesOrderOutOfStock sooos
       JOIN Item AS i ON i.ItemID = sooos.ItemID
       JOIN SalesOrder so ON so.SalesOrderID = sooos.SalesOrderID
       JOIN WarehouseInventory wi ON wi.ItemID = sooos.ItemID
       JOIN Store s ON s.StoreID = so.StoreID
       JOIN InvoiceOrderRelationship ior ON ior.SalesOrderID = so.SalesOrderID
       JOIN StockSale ss ON ss.WarehouseInvoiceNo = ior.WarehouseInvoiceNo
       JOIN TransactionRegister tr ON tr.TransactionNo = ss.TransactionNo
       JOIN Period p ON p.PeriodID = tr.PeriodID
       JOIN Department d ON d.DepartmentID = i.DepartmentID
       LEFT OUTER JOIN (SELECT TOP 1 itemID
                                     , supplierID
                        FROM   SupplierInvoiceDetail sid
                               JOIN SupplierInvoice si ON si.SupplierInvoiceID = sid.SupplierInvoiceID
                       --where (sid.ItemID = i.itemID) 
                       order by InvoiceDate desc 
                       --NEED AN ORDER BY HERE
                       ) AS lastSupplier ON lastSupplier.ItemID = i.ItemID
       JOIN supplier su ON su.SupplierID = Isnull(lastSupplier.supplierID, i.supplierID)
WHERE  ss.WarehouseInvoiceNo = 10000000 
--$p{invoiceNo}

您需要在此处使用,而不是
左连接

OUTER APPLY (SELECT TOP 1 itemID
                                 , supplierID
                    FROM   SupplierInvoiceDetail sid
                           JOIN SupplierInvoice si ON si.SupplierInvoiceID = sid.SupplierInvoiceID
                   where (sid.ItemID = i.itemID) order by InvoiceDate desc 
                   ) AS lastSupplier

FROM
JOIN
子句中引入的子查询不能引用同一
FROM
子句中的其他表源(实际上,它们都应该可以同时计算)<代码>应用允许您在评估中引入特定的依赖项。

hmmm。。。不知道为什么它的格式是这样的使用而不是
LEFT JOIN
,这将允许您访问外部字段。格式化:(或者,您可以突出显示代码块并点击
{}
按钮)请注意,您有一个子查询使用top 1,没有order by。当你没有收到订单时,你无法知道你会回到哪一排。谢谢你,达米恩。肖恩:我将编辑并插入行