我有以下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表的连接类型感到困惑。
答案 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;