[英]SQL left join on select statements with where clause
我试图像这样的选择语句左联接:
select *
from (select * from foo where rownum <= 10 ) tab1
left join (select sum(total) total,sum(worker) worker from bars where work_date between tab1.start_date and tab1.end_date ) tab2
on tab1.foo_id=tab2.id
我收到以下错误:
oci_execute():ORA-00904:“ tab1”。“ end_date”:无效的标识符
任何帮助,将不胜感激,谢谢!
一种执行所需操作的方法是使用两个相关的子查询:
select foo.*
(select sum(b.total) as total, sum(worker) as worker
from bars
where b.work_date between foo.start_date and foo.end_date and
foo.foo_id = b.id
) as total,
(select sum(b.worker) as worker
from bars b
where b.work_date between foo.start_date and foo.end_date and
foo.foo_id = b.id
) as worker
from foo
where rownum <= 10;
这也应该起作用:
select
tab1.foo_id
,tab1.start_date
,tab1.end_date
,sum(tab2.total) as total
,sum(tab2.worker) as worker
from foo tab1
left join bars tab2
on tab2.work_date between tab1.start_date and tab1.end_date
and tab1.foo_id = tab2.id
where tab1.rownum <= 10
group by
tab1.foo_id
,tab1.start_date
,tab1.end_date
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.