将左连接添加到两个表的结果中选择

时间:2013-12-10 17:31:59

标签: c# sql sql-server-2008 left-join

好的,如果我有两个表的以下select语句:

SELECT shipments.ShipmentID, shipments.Name, shipments.Reference_No As [Reference Number], shipments.Qty, shipments.Status, 
       Shipment_Details.ISBN, Shipment_Details.Title, Shipment_Details.Author, Shipment_Details.Publisher, 
FROM shipments, Shipment_Details 
WHERE shipments.Shipment_No = Shipment_Details.Shipment_No AND shipments.Order_No = Shipment_Details.Order_No 
               AND  ((Shipment_Details.Order_No=@Order_No))  

如何使用名为ShippingSystemExport的表格进行左联接,以及在ShippingSystemExport中找到shipment.ShipmentID并且货运.Status(来自原始查询)未“已发货”然后将shipents.ShipmentID的值返回为“在运输部门扫描”

2 个答案:

答案 0 :(得分:0)

如果我正确理解您的要求,以下查询应该完成工作。如果我错了,请纠正我。

SELECT 'Scanned in Shipping Department' AS ShipmentID, shipments.Name, shipments.Reference_No As [Reference Number], shipments.Qty, shipments.Status, 
   Shipment_Details.ISBN, Shipment_Details.Title, Shipment_Details.Author, Shipment_Details.Publisher, 
FROM shipments
INNER JOIN Shipment_Details ON shipments.Shipment_No = Shipment_Details.Shipment_No AND shipments.Order_No = Shipment_Details.Order_No AND ((Shipment_Details.Order_No=@Order_No)) 
LEFT JOIN ShippingSystemExport ON ShippingSystemExport.ShipmentID = shipments.ShipmentID
WHERE shipments.Status <> 'Shipped'

但是,为什么“在运输部门扫描”作为ShipmentID返回?只是想知道......

答案 1 :(得分:0)

这可能就是你要找的东西:

SELECT a.ShipmentID, a.Name, a.Reference_No As [Reference Number], a.Qty, a.Status, 
b.ISBN, b.Title, b.Author, b.Publisher, a.ShipmentID AS [Scanned in Shipping Department]
FROM shipments a
INNER JOIN Shipment_Details b
ON a.Shipment_No=b.Shipment_No AND a.Order_No = b.Order_No AND
INNER JOIN ShippingSystemExport c
ON a.ShipmentID=c.ShipmentID AND a.Status <> 'Shipped'
WHERE b.Order_No=@Order_No AND c.ShipmentID

我使用INNER JOIN代替LEFT JOIN,就像我在你的问题评论中所述。

相关问题