2010-08-15 61 views
1

我有三個MySQL查詢需要使用連接組合成單個查詢。我很難找出如何做到這一點。這是三個查詢。如何組合這三個查詢?

select 
    sum(A.a) 
from A join B 
on A.BID = B.id 
where B.userID=userID 

select 
    sum(C.c) 
from D left join (C) 
on (D.id=C.DID) 
where D.userID = userID 

select sum(E.e) from E where E.userID=userID 

我需要以某種所有這些查詢合併成一個單一的查詢與用戶表連接給我sum(A.a)+sum(C.C)+sum(E.e)每個user.id.我嘗試了所有牌桌上的左連接

user left join (A, B, C, D, E) 
on ((A.BID = B.id and B.userID=user.id) 
    or (D.id=C.DID and D.userID = user.id) 
    or (E.userID=user.id)) 

這在黑暗中幾乎是一個鏡頭,它失敗的壯觀。我不知道如何結合這三個查詢,任何人都給我一個提示?

編輯澄清:我需要此查詢是用戶表與上述查詢的聯接,因爲我需要能夠選擇由sum_value排序的所有用戶ID。先前的三個查詢分別運行,並用一個用戶ID參數化。

進一步編輯:試圖聯合所有加入到用戶查詢我可以認爲它的每個變種,它不起作用。它非常接近於一些調整,但它仍然返回不正確的值。我不確定它爲什麼這樣做。

回答

2
select 
    ((select 
     sum(A.a) 
    from 
     A join B 
     on A.BID = B.id 
    where 
     B.userID = user.ID) + 
    (select 
      sum(C.c) 
     from 
      D left join (C) 
      on (D.id = C.DID) 
    where D.userID = user.ID) + 
    (select 
      sum(E.e) 
     from 
      E 
     where 
      E.userID = user.ID)) 
from 
    user 
+0

這不起作用 - 請參閱編輯。 – 2010-08-15 07:09:40

+1

這當然有效 - 更新 – 2010-08-15 07:34:01

+1

賓果!謝謝@CooL i3oY :)甚至不需要加入......就是在完全錯誤的樹上吠叫。 – 2010-08-15 07:45:31

3

也許是這樣的:

select sum(sum_value), user_id from (
select 
    sum(A.a) as sum_value, B.userID as user_id 
from A join B 
on A.BID = B.id 
GROUP BY B.userID 

UNION ALL 

select 
    sum(C.c) as sum_value, D.userID as user_id 
from D left join (C) 
on (D.id=C.DID) 
GROUP BY D.userID 

UNION ALL 

select sum(E.e) as sum_value, E.userID as user_id from E 
GROUP BY E.userID 
) 
GROUP BY user_id 
+0

這是行不通的 - 見編輯。 – 2010-08-15 07:09:22

+0

更新 - 做了我的頭頂上(它超級晚,如果它不工作,對我來說很容易:),仍然沒有加入,但這會給你的用戶ID與一個查詢的總和。當然,您可以在最後輸入ORDER BY以按照您希望的順序獲取結果。 – codykrieger 2010-08-15 07:31:41

+0

不用擔心,謝謝你的努力。這幾乎是我剛剛嘗試過的,並且它返回不正確的值。不知道爲什麼。其中一個值具有userID = 37,並且對於每個子查詢,它分別顯示230,8和50.但在某些顯示爲488. – 2010-08-15 07:38:19