假设我有两张桌子:
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 :(得分: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