2014-11-06 14 views
-2

比方說,我有兩個表:在子查詢使用「父母」欄目的

CREATE TABLE partners (name varchar, id int, hire_date varchar); 
CREATE TABLE payments (partner_id int, payment_date varchar, payment_amount decimal); 

,我想創建一個查詢,說:「給我所有的合作伙伴的名稱,所有款項的總和在他們的僱用日期後向他們提供。「

我可能會嘗試這樣的事:

SELECT name, subselect.pps FROM partners 
LEFT JOIN (SELECT partner_id, sum(payment_amount) AS pps 
    FROM payments WHERE payment_date > partners.hire_date) subselect 
    ON subselect.partner_id=partners.id 
; 

但是,當然,我得到:

no such column: partners.hire_date 

有什麼辦法,我可以做到這一點,即從外部查詢使用列我內部查詢?

+0

爲什麼恨?這是一個合法的問題,不是嗎? – brooks94 2014-11-07 13:30:30

回答

3

你可以只使用一個OUTER JOIN沒有子查詢:

SELECT part.name, SUM(pay.payment_amount) pps 
FROM partners part 
    LEFT JOIN payments pay ON part.id = pay.partner_id 
     AND pay.payment_date > part.hire_date 
GROUP BY part.name 
0

如果你想使用子查詢,您不能使用已加入partners子查詢。

相關子查詢必須是標量子查詢:

SELECT name, 
     (SELECT sum(payment_amount) 
     FROM payments 
     WHERE partner_id = partners.id 
      AND payment_date > partners.hire_date 
     ) AS pps 
FROM partners