我有如下表:卡在「在條款」
create table passenger (passenger_ID varchar (10) , passenger_name varchar (30) , passenger_city varchar (30) , primary key (passenger_ID)) ;
create table flight (flight_number varchar (10) , departure_airport varchar (10), arrival_airport varchar (10) , primary key (flight_number));
create table seat (
flight_number varchar (10),
seat_number varchar (10),
primary key(flight_number, seat_number),
foreign key(flight_number) references flight);
create table reservation(
passenger_ID varchar (10)
flight_number varchar (10) , seat_number varchar (10) ,
day date ,
fare numeric(8,2),
primary key (flight_number, seat_number,day),
foreign key (flight_number, seat_number) references seat) ,
foreign key (passenger_ID) references passenger ;
我被困在了這個問題: 查找保留一個航班每位乘客的ID(或航班)從「ALB」出發,從未預訂到達'ALB'的航班。對於此查詢,請使用in子句或not in子句。
我寫了這麼多查詢:
select a.passenger_id from
reservation a
where a.flight_number in (select b.flight_number from flight b where
b.departure_airport = 'ALB'
and b.arrival_airport <> 'ALB');
但這種查詢是不正確的。子查詢返回與過濾條件相匹配的所有航班號。但是主要的select查詢會返回子查詢返回的flight_number的所有乘客id,即使該乘客的arrival_airport是ALB。
我的預約表:
passenger_id flight_number seat_number day fare
2 A2 201 10/1/17 1083
1 A3 301 10/1/17 1173.25
1 A4 402 10/1/17 846.81
2 A5 501 10/1/17 752.72
1 A5 502 10/1/17 485
4 A5 506 10/1/17 970
2 A6 601 10/1/17 388
1 A7 703 10/1/17 921.5
3 A7 704 10/1/17 921.5
2 A8 804 10/1/17 970
4 A8 805 10/1/17 970
我的飛行表:
flight_number departure_airport arrival_airport
A1 Ktm Pkr
A2 Ktm NY
A3 Ktm Ind
A4 Ktm Chn
A5 ALB KTM
A6 ALB PKR
A7 KTM ALB
A8 PKR ALB
對不起,它沒有工作。請看我的桌子。只有A5和A6航班從ALB出發。所以,乘客ID 1,2和4是符合條件的。但passenger_id 4已預約到達ALB,因此應予以忽略。所以我應該只得到1和2乘客ID –
@SujanShrestha。 。 。你使用了「GROUP BY」查詢嗎?也許你應該設置一個SQL小提琴或Rextester。 –
http://sqlfiddle.com/#!17/deeeb/1 –