【发布时间】:2014-10-08 18:04:31
【问题描述】:
问题是:您想成为第一个预订和挑选航班座位的人。查找没有预订的所有航班的flight_num 和日期。
来自下表:
-
Flights(flight_num, source_city, dest_city) -
Departures(flight_num, date, plane_type) -
Passengers(passenger_id, passenger_name, passenger_address) -
Bookings(passenger_id, flight_num, date, seat_number)
我的回答是:
SELECT D.flight_num, D.date
FROM DEPARTURES D, BOOKINGS B
WHERE B.passenger_id = NULL
我知道这是错误的,但谁能告诉我为什么?答案是什么?
【问题讨论】:
-
除其他外,您还希望
is null检查空值。 -
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(20 多年前),不鼓励使用。现在,如果没有 any 连接条件,您基本上会得到一个 笛卡尔积 -Departures中的每一行与Bookings中的每一行相结合 - 很可能 不是 你需要什么! -
您是在课程中还是从书中学到的?如果是这样,是时候升级或拿回你的钱了。我认为那些旧式连接是罗马人发明的。
-
此外,您现在正在交叉加入。您需要说明哪些字段与哪些字段相关,以便正确连接表。以
WHERE d.flight_num = b.flightnum为例
标签: sql