相关子查询 - Codeacademy

时间:2017-08-03 10:06:54

标签: sql

通过codeacademy学习SQL。例子是航班表;
例如,假设每次增加航班时flight_id会增加,我们可以使用以下查询按运营商,航班ID和序列号查看航班:

SELECT carrier, id,
    (SELECT COUNT(*)
     FROM flights f
     WHERE f.id < flights.id
       AND f.carrier = flights.carrier) + 1 AS flight_sequence_number
FROM flights;

我不了解飞行后'f'的功能。 f.carrier = flights.carrier是什么意思? 如果有人可以提供一些很棒的光!

2 个答案:

答案 0 :(得分:0)

提供表别名,因为随着查询的增长,您将失去跟踪。

SELECT f.carrier, f.id, (SELECT COUNT(*)
                         FROM flights fs
                         WHERE fs.id < f.id
                         AND fs.carrier = f.carrier) + 1 AS flight_sequence_number
FROM flights f;

答案 1 :(得分:0)

B是一个表别名,用于区分内部和外部查询中对f的引用。我通常会将flights用于外部查询,将f用于内部查询:

f2

作为一个注释,这是一种荒谬和老式的计算方法。 ANSI SQL支持一个简单的函数来执行此操作:

SELECT f.carrier, f.id,
       (SELECT COUNT(*) + 1
        FROM flights f2
        WHERE f2.id < f.id AND f2.carrier = f.carrier
       ) AS flight_sequence_number
FROM flights f;