개인 쿼리와 동일한 결과를 얻기 위해 두 가지 쿼리에 참여하려고합니다. 나는 MySQL의 쿼리에 숙련 된 사람이 아니기 때문에 내 처지가된다. 다음은 내 검색어 및 그 결과입니다. 여기 내 쿼리가 함께 결합 -두 테이블을 결합하는 MySQL이 잘못된 결과를 나타냅니다.
select count(fbai.id) as totalRows
from FBAInventory fbai
LEFT JOIN FBAInventoryReport fbair
ON fbai.fbaInventoryReport_id = fbair.id
where fbai.asin = 'B002BRSCJ6'
and fbai.sku = '643356041428'
and fbai.account_id = 8
and fbair.report_datetime BETWEEN '2014-05-12' AND '2014-06-11';
/*
totalRows = 30
*/
쿼리 # 3 :
다음select sum(fbaoh.qty) as sumQty
from FBAOrderHistory fbaoh
where fbaoh.asin = 'B002BRSCJ6'
and fbaoh.sku = '643356041428'
and fbaoh.account_id = 8
and fbaoh.datetimePlaced BETWEEN '2014-05-12' AND '2014-06-11';
/*
sumQty = 139
*/
쿼리 # 2 : 여기에
쿼리 # 1
select sum(fbaoh.qty) as sumQty,
count(fbai.id) as totalRows
from FBAOrderHistory fbaoh
LEFT JOIN FBAInventory fbai
ON fbaoh.asin=fbai.asin
LEFT JOIN FBAInventoryReport fbair
ON fbai.FBAInventoryReport_id=fbair.id
where fbaoh.asin = 'B002BRSCJ6'
and fbaoh.sku = '643356041428'
and fbai.account_id = 8
and fbaoh.account_id = 8
and fbaoh.datetimePlaced BETWEEN '2014-05-12' AND '2014-06-11'
and fbair.report_datetime BETWEEN '2014-05-12' AND '2014-06-11';
/*
sumQty = 4170
totalRows = 3840
*/
FBAOrderHistory
id | qty | sku | asin | datetimePlaced
------------------------------
1 | 1 | ABC | 123 | 2014-05-20 06:06:03
FBAInventory
id | sku | asin | fbaInventoryReport_id
---------------------------------------------------
1 | ABC | 123 | 1
FBAInventoryReport
id | report_datetime
---------------------------------------------------
1 | 2014-05-20 06:06:03
,691,363
: 여기
테이블 스키마이다210
쿼리 # 1 - 나는 sku와 asin 및 날짜 범위를 기반으로 합계를 얻고 있습니다.
쿼리 # 2 - 나는 sku와 asin 및 날짜 범위를 기반으로 전체 행을 얻고 있습니다.
쿼리 # 3 - 동일한 결과를 얻고 싶습니다. 두 쿼리 사이의 유일한 연결은 sku와 asin입니다.
분명히 마지막 쿼리의 결과가 내가 의도 한 결과가 아닙니다. 내가 도대체 뭘 잘못하고있는 겁니까?
내가 알 수있는 것은 다음과 같습니다. sumQty 및 totalRows를 표시하는 대신 실제로 sumQty (139)와 totalRows (30)를 곱하여 4170과 같습니다. 3840에 대해서는 어떻게 렌더링되는지 전혀 알지 못합니다.
누구에게도 도움을 주셔서 감사합니다.
왜 완전히 다른 두 가지 쿼리에 참여 하시겠습니까? –
질문에 귀하의 테이블 구조를 게시 할 수 있습니까? –
"나무"조인을하고 있습니다. 'A-> B'와'A-> C'. 표 B와 C가 서로 다른 행 수를 가지면 한쪽으로 치우친 결과를 얻게됩니다. "더 큰"쪽은 더 작은 쪽의 누락 된 행을 강제로 Null로 채 웁니다. –