2014-10-08 85 views
0

現在的問題是:您想成爲第一個爲航班預訂和選擇座位的人。查找所有沒有預訂的航班的flight_num和日期。SQL查詢:尋找空

從以下表:

  • Flightsflight_num, source_city, dest_city
  • Departuresflight_num, date, plane_type
  • Passengerspassenger_id, passenger_name, passenger_address
  • Bookingspassenger_id, flight_num, date, seat_number

我的回答是:

SELECT D.flight_num, D.date 
FROM DEPARTURES D, BOOKINGS B 
WHERE B.passenger_id = NULL 

我知道這是錯誤的,但誰能告訴我爲什麼?這是什麼答案?

+6

除了其他的事情,你希望'是null'來檢查空值。 – 2014-10-08 18:06:07

+5

[踢壞的習慣:使用舊式JOIN](http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style-joins。 aspx) - 在ANSI - ** 92 ** SQL標準(**超過20年前的**)中,舊式*逗號分隔的表*樣式列表被替換爲* proper * ANSI'JOIN'語法它的使用是不鼓勵的。現在,如果沒有**任何**連接條件,您基本上會得到一個**笛卡爾產品** - 每個行中的'Departures'與'Bookings'中的每一行相結合 - 最有可能**不是**您需要的! – 2014-10-08 18:07:31

+3

你是從課本中還是從書中學到的?如果是這樣,升級或退款的時間。我認爲這些舊式的連接是羅馬人發明的。 – GolezTrol 2014-10-08 18:08:15

回答

1

這可能會更好:

SELECT D.flight_num, D.date 
FROM DEPARTURES D JOIN BOOKINGS B ON D.flight_num = B.flight_num 
WHERE B.passenger_id IS NULL 

我不知道是否有可能預訂,但不預留座位號。如果是這樣,那麼你需要爲此更改WHERE子句。

0

這可能有效嗎?

SELECT D.flight_num, D.date 
    FROM Departures D LEFT OUTER JOIN Bookings B 
    WHERE B.passenger_id IS NULL