仅在DB2中存在首选列时选择它

时间:2014-11-18 23:07:37

标签: sql join db2

我有以下3个表(ORDERS,SUPPLIERS和OUTSTANDING):

订单
orderedQty
receivedQty
ORDERNUMBER
supplierId

供应商
供应商ID
orderNumber

杰出
供应商ID
productId参数
ORDERNUMBER
productId参数
updatedQty

我希望从ORDERS和另一个名为“shipping”的列中选择所有内容。

“送货”应包含OUTSTANDING的updatedQty中的值(如果存在),否则它应该再次将ORDERED的“orderedQty”值作为“送货”返回。

到目前为止,我有以下内容:

SELECT     ORDERS.orderedQty, ORDERS.orderNumber,                                                                                 
           ORDERS.productId, OUTSTANDING.updatedQty 

{SOME MAGIC HERE THAT CHECKS IF OUTSTANDING HAS a record ELSE RETURNS ORDERS' orderedQty as shipping}


FROM         ORDERS INNER JOIN                                                                                                    
              SUPPLIERS AS D ON ORDERS.supplierId = D.supplierId AND ORDERS.orderNumber = D.orderNumber INNER JOIN                
              OUTSTANDING ON ORDERS.supplierId = OUTSTANDING.supplierId AND ORDERS.orderNumber = OUTSTANDING.orderNumber AND      
              ORDERS.productId = OUTSTANDING.productId              

另外请注意我对于我应该用来引入OUTSTANDING表的连接类型感到困惑。

1 个答案:

答案 0 :(得分:2)

您没有完全说明价值不存在的含义。我的假设是没有匹配或值为NULL。

无论哪种方式,您都可以使用COALESCE()获得所需内容。有了这个逻辑,我认为LEFT JOIN更合适。这可以确保您获得所有订单,即使其他表中没有匹配的记录也是如此。

SELECT o.orderedQty, o.orderNumber, o.productId, os.updatedQty,
       COALESCE(os.updatedQty, o.orderedQty) as NewColumn
FROM ORDERS o LEFT JOIN                                                                                                    
     SUPPLIERS s 
     ON o.supplierId = s.supplierId AND o.orderNumber = s.orderNumber LEFT JOIN                
     OUTSTANDING os
     ON o.supplierId = os.supplierId AND o.orderNumber = os.orderNumber AND      
        o.productId = os.productId;