-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) 

サブクエリを使用して試してみましたが、混乱します。これらの3つのクエリを1つのクエリに関連付けるにはどうすればよいですか?

4

2 に答える 2

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)
于 2012-09-23T21:57:45.977 に答える
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が1つしかないことを前提としていmax(route_id)ます。念のため、代わりに必要な場合があります。

また、原則として、UNIONではなくUNION ALLに慣れる必要があります。これは、より効率的だからです。

于 2012-09-24T02:38:39.657 に答える