2011-07-14 70 views
1

我有一個查詢來提取給定發佈者ID的總數。我想將其用作子查詢,以便遍歷所有發佈者ID。MySQL子查詢問題

對於給定的ID我的工作查詢:

SELECT SUM(d.our_cost) 
FROM articles a 
CROSS JOIN domains d ON a.domain_id = d.id 
    AND d.publisher_id = '1094' 

我想拉這個數字對所有的ID在發行P表,其中d.publisher_id = p.id

到目前爲止,我已經試過以下無濟於事:

SELECT p.id, p.contact_name, p.contact_email, 
    (SELECT SUM(d.our_cost) 
    FROM articles a 
    CROSS JOIN domains d ON a.domain_id = d.id and d.publisher_id = p.id) total 
FROM publishers p 

我得到特定的錯誤是:未知列‘’在‘p.id的條款’

回答

1

我想你應該修改您的查詢,並把該子查詢在FROM子句中,這樣的事情:

SELECT p.id, p.contact_name, p.contact_email, total.total_cost 
FROM 
    (
    SELECT SUM(d.our_cost) as total_cost, d.publisher_id 
    FROM articles a CROSS JOIN domains d ON a.domain_id = d.id) total 
JOIN publishers p on total.publisher_id = p.id 
0

我假設你已經得到了你的語法錯誤,請嘗試:

SELECT p.id, p.contact_name, p.contact_email, SUM(d.our_cost) as total 
FROM articles a 
    CROSS JOIN domains d ON a.domain_id = d.id 
    JOIN publishers p ON d.publisher_id = p.id 
+0

嗯,很好的建議,但這似乎不成問題。我得到的錯誤是:'on子句'中的未知列'p.id'。 – Charles

+0

@Charles,oops,重新閱讀問題,查看更新的答案 – Dirk

0

似乎是一組通過將方便在這裏,而不是

而且好像你不需要物品表中所有的(除非您有其他業務規則)

SELECT p.id, p.contact_name, p.contact_email, IFNULL(SUM(d.our_cost),0) AS total 
    FROM publishers p 
    LEFT JOIN domains d ON d.publisher_id = p.id 
GROUP BY p.id