-1

我有这些带有一些值的表。

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) 

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

4

2 回答 2

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)

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

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

于 2012-09-24T02:38:39.657 回答
0

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

INTERSECT 为您提供共同的价值观。联合为您提供两个结果集中的所有值,而不会重复。

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

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)
于 2012-09-23T21:57:45.977 回答