在oracle 10g中使用多个子查询

时间:2012-09-23 21:22:48

标签: sql oracle oracle10g

我有这些表有一些值。

ticket_detail
ticket_header
route_header
route_detail
fleet_header

现在我有这个问题,我必须编写查询。

Select common ticket numbers 
from ticket header and ticket detail 
where route ids are greater than route_id 
which belong to the place with id ‘04’.

编辑我尝试使用

select * from   
   (select ticket_number 
    from ticket_header
    union 
    select ticket_number from ticket_detail)     
where route_id > (select route_id from ticket_detail where id = 4) 

我尝试使用子查询来做这件事,但这让我感到困惑。我们如何在单个查询中关联这三个查询?

2 个答案:

答案 0 :(得分:0)

我认为UNION关键字应该是INTERSECT。

INTERSECT为您提供常用值。 Union为您提供了两个结果集中的所有值,没有重复。

这个问题仍需要一些澄清,但你走的是正确的道路。您的查询看起来语法错误。试试这个,如果这不起作用,请发布一些输出数据不符合预期的样例。

select ticket_number 
  from ticket_header th
  where th.route_id > (select route_id from ticket_detail where id = 4)
INTERSECT
select ticket_number 
  from ticket_detail td
  where td.route_id > (select route_id from ticket_detail where id = 4)

答案 1 :(得分:0)

您的查询已关闭,但您需要内部查询中的route_id:

select *
from (select ticket_number, route_id 
      from ticket_header
      union 
      select ticket_number, route_id
      from ticket_detail
     ) t
where route_id > (select route_id from ticket_detail where id = 4)

这假设只有一个route_id,其中id = 4.您可能需要max(route_id),只是为了确定。

另外,作为一般规则,你应该习惯UNION ALL而不是UNION,因为它更有效率。