【问题标题】:SQL Query: looking for nullSQL 查询:寻找空值
【发布时间】: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


【解决方案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 子句。

【讨论】:

    【解决方案2】:

    这可能有用吗?

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 2021-01-26
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多