繁体   English   中英

SQL在带where子句的select语句上左连接

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM