我有这些表有一些值。
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)
我尝试使用子查询来做这件事,但这让我感到困惑。我们如何在单个查询中关联这三个查询?
答案 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,因为它更有效率。