2014-10-23 1 views
0

나는 매우 혼란 스럽습니다! 나는 내가 찾고있는 결과를 나에게 개별적으로주는 3 개의 테이블을 가지고있다. 내가 가입 할 때 (조인, 노조, 왼쪽 조인, 하위 쿼리) 나는 결과가 왜곡됩니다.고유 한 왼쪽 결합은 왜곡 된 결과를 나타냅니다.

표 1 :

SELECT DISTINCT JB.job_id, AP.job_id, SUM(price) AS price, AP.vendor FROM job_tbl JB 
LEFT JOIN ap_tbl AP ON JB.job_id = AP.job_id WHERE AP.marked_as_paid = 1 AND 
AP.activity = 'Commission' AND FROM_UNIXTIME(AP.payment_date,'%Y') = YEAR(NOW()) GROUP 
BY vendor ORDER BY price DESC LIMIT 10 

: 나에게 내가 (이 예를 들어 단지 보여주는 하나 개의 결과)

[job_id] => 551 
[jid] => 551 
[sum] => 124440.97024536133 
[marketing_campaign] => Roto Rooter 

표 2를 찾고 있어요 결과를 제공

SELECT DISTINCT JB.job_id, AR.job_id as jid, SUM(AR.ar_payment_amount) AS sum, 
JB.marketing_campaign FROM job_tbl JB LEFT JOIN ar_payment_tbl AR ON JB.job_id = 
AR.job_id WHERE JB.marketing_campaign != '' AND FROM_UNIXTIME(AR.ar_payment_date,'%Y') = 
YEAR(NOW()) GROUP BY JB.marketing_campaign ORDER BY sum DESC LIMIT 10 

어떤 결과를 얻었습니까?

내가 그들과 합류 할 때
 [job_id] => 551 
     [price] => 5700 
     [vendor] => 436 

지금 내가 여기

 [job_id] => 551 
     [arid] => 551 
     [apid] => 551 
     [sum] => 130507.02011108398 
     [price] => 8200 
     [marketing_campaign] => Roto Rooter 

얻을하고 결과를 다른 결과 다음

SELECT DISTINCT JB.job_id, AR.job_id as arid, AP.job_id as apid, 
SUM(AR.ar_payment_amount) AS sum, SUM(AP.price) AS price, JB.marketing_campaign FROM 
job_tbl JB LEFT JOIN ap_tbl AP ON JB.job_id = AP.job_id AND AP.marked_as_paid = 1 AND 
AP.activity = 'Commission' LEFT JOIN ar_payment_tbl AR ON JB.job_id = AR.job_id AND 
FROM_UNIXTIME(AR.ar_payment_date,'%Y') = YEAR(NOW()) WHERE AP.price != '' AND 
AR.ar_payment_amount != '' AND JB.marketing_campaign != '' GROUP BY 
JB.marketing_campaign ORDER BY sum DESC LIMIT 10 

을 결과가 있어야한다 무엇인가되어 얻을

 [job_id] => 551 
     [arid] => 551 
     [apid] => 551 
     [sum] => 124440.97024536133 
     [price] => 5700 
     [marketing_campaign] => Roto Rooter 

어떤 도움을 주시면 감사하겠습니다.이 프로젝트는 지난 금요일 마감 예정입니다! ;-)

답변

0

이 시도 - 나는 JOIN 조건 문제와 GROUP BY이 있었다 생각 :

SELECT 
    JB.job_id, 
    AR.job_id as arid, 
    AP.job_id as apid, 
    JB.marketing_campaign, 
    SUM(AR.ar_payment_amount) AS `sum`, 
    SUM(AP.price) AS price 

FROM job_tbl JB 
LEFT JOIN ap_tbl AP ON JB.job_id = AP.job_id 
LEFT JOIN ar_payment_tbl AR ON JB.job_id = AR.job_id 
WHERE 
    AP.marked_as_paid = 1 
    AND AP.activity = 'Commission' 
    AND FROM_UNIXTIME(AR.ar_payment_date,'%Y') = YEAR(NOW()) 
    AND AP.price != '' 
    AND AR.ar_payment_amount != '' 
    AND JB.marketing_campaign != '' 
GROUP BY 1,2,3,4 
ORDER BY `sum` DESC LIMIT 10 
+0

감사 베니, 그것은 그것의 합계가 1이되지 않습니다이며, 각 작업 ID를 표시하고 나는 그것을 사용하는 경우 모두 함께 추가하면 합계가 올바르게 계산됩니다. JB.job_id를 제거하면 이전과 같은 대답이되지만 제대로 그룹화됩니다. (또한 GROUP BY 여야 함) 다른 생각은 없습니까? – user2823774

+0

??? 이 문제는 어떻습니까 (답변의 업데이트 된 쿼리 참조)? – Benvorth

+0

같은 ... 나에게 모든 job_id를 제공하고 marketing_campaign별로 그룹화하지 않았습니다. – user2823774

관련 문제