在subselect中使用“parent”列

时间:2014-11-06 19:56:54

标签: sql database sqlite

假设我有两张桌子:

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

我有什么方法可以做到这一点,即在我的内部查询中使用外部查询中的列?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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