2014-09-30 2 views
0

두 테이블을 결합하는 데 문제가 있습니다. 계속해서 내 값 "qtyFulfillable"을 곱합니다.MySQL Join 결과에 곱하기

첫째, 나는이 쿼리를 실행할 때, 나는 정확한 결과를 얻을 : sumQF = 85

SELECT fbai.id, 
     fbai.sku, 
     CASE WHEN SUM(fbai.qtyFulfillable) > 0 THEN SUM(fbai.qtyFulfillable) ELSE 0 END AS sumQF 
FROM FBAInventory fbai 
WHERE fbai.fbaInventoryReport_id = 62010 
AND  fbai.sku = 'ELO-250030' 
GROUP BY fbai.id 
ORDER BY sumQF DESC 

하지만 조인에 추가하기 시작할 때, 지금 얻을 : sumQF = 14110

SELECT fbai.id, 
     fbai.sku, 
     CASE WHEN SUM(fbai.qtyFulfillable) > 0 THEN SUM(fbai.qtyFulfillable) ELSE 0 END AS sumQF, 
     CASE WHEN SUM(fbas.quantityShipped) > 0 THEN SUM(fbas.quantityShipped) ELSE 0 END as sumQS 
FROM FBAInventory fbai 
LEFT JOIN FBAShipment fbas 
ON fbai.sku = fbas.sku 
WHERE fbai.fbaInventoryReport_id = 62010 
AND  fbai.sku = 'ELO-250030' 
GROUP BY fbai.id 
ORDER BY sumQF DESC 

어떤 이유로 "FBAS"테이블의 행의 총 수 (조인 테이블), 행 (166)을 가지고, 그리고 85 X 166 = 14,110 곱셈 SQL.

이 테이블에 조인 할 수 있지만 내 결과에 조인 된 테이블의 총 행 수를 곱하지 않으려면 어떻게해야합니까? 감사!

+2

MySQL 또는 SQL Server를 사용하고 있습니까? 실제로 두 가지를 사용하지 않는 한 완전히 다른 두 개의 데이터베이스 플랫폼에 태그를 지정하지 마십시오. –

+0

FBAInventory에 SKU = 'ELO-250030'인 85 개의 레코드가있는 경우이 85 개의 각 행에 대해 동일한 SKU를 가진 FBAShipment의 행과 결합하려고 시도합니다. 조인의 "ON"절에서 원하는 다른 필드 쌍이 있어야합니다. –

+0

fbas.sku를 GROUP BY 절에 추가하면 문제가 해결됩니까? 나는. 'GROUP BY fbai.id, fbas.sku' – Ruslan

답변

0

별도의 쿼리에서 두 번째 수량을 합산하고 JOIN을 입력 할 수 있습니다. CASE 문 대신 GREATEST을 사용하는 것도 좋습니다.

SELECT fbai.id, 
      fbai.sku, 
      GREATEST(SUM(fbai.qtyFulfillable),0) sumQF, 
      COALESCE(fbas_sum.value,0) sumQS /* COALESCE in case no rows */ 
     FROM FBAInventory fbai 
LEFT JOIN (
     SELECT sku, 
       GREATEST(SUM(quantityShipped),0) value 
      FROM FBAShipment 
     GROUP BY sku 
      ) fbas_sum 
     ON fbas_sum.sku=fbai.sku 
    WHERE fbai.fbaInventoryReport_id=62010 
     AND fbai.sku='ELO-250030' 
    GROUP BY id, sku, sumQS /* Added other non-aggregates for sanity */ 
    ORDER BY sumQF DESC 

그래도 id에 그룹으로 묶으시겠습니까? 나는 id이 표의 기본 키이므로 합계 하나의 행만 가져야한다고 가정합니다.