【问题标题】:SQL previous, next rowSQL 上一行,下一行
【发布时间】:2016-06-29 05:51:02
【问题描述】:

2 张桌子,一张带航班,一张带目的地。 我想要表 2 中的所有出发和到达航班(为我工作)。但我想让到达跟随离开。查看示例 谢谢大家

CREATE TABLE flights
        (`Name` varchar(10), `Departure` varchar(50), `Arrival` varchar(10), `Pass` int, `Cargo` int, `Dist` int)
    ;

    INSERT INTO flights
        (`Name`, `Departure`, `Arrival`, `Pass`, `Cargo`, `Dist`)
    VALUES
        ('444 737vvv', 'LFLL gee', 'LPMAdsf', 200, 2000, 12),
        ('gg737vvv', 'LPMA-egege', 'LFLLdsf', 3000, 0, 13),
        ('747vvv', 'LFLLèèegege', 'LPMAdsf', 0, 5000, 15),
        ('747vvv', 'OTHHèèegege', 'LPMAdsf', 0, 5000, 15),
        ('747vvv', 'OMDBèèegege', 'LPMAdsf', 0, 5000, 15),
        ('a320vvv', 'EGKK-egege', 'LFPOdd', 0, 6000, 14)
    ;



    CREATE TABLE Regular
        (`Dep` varchar(21), `Arri` varchar(21),`Type` varchar(21))
    ;

    INSERT INTO Regular
        (`Dep`, `Arri`, `type`)
    VALUES
        ('LFLL', 'LFPG', 'cargo'),
        ('LFPG', 'LFLL', 'cargo'),
        ('LFLL', 'LPMA', 'com'),
        ('LPMA', 'LFLL', 'cargo'),
        ('LFPO', 'EGKK', 'cargo'),
        ('EGKK', 'LFPO', 'com')
    ;

有了这个请求,我有所有航班的出发和到达都在常规表中。好的!但我只想要到达后出发的航班。

今天以这个为例:

 $query = "Select
    flights.UserName,
    flights.FlightDate,
    flights.FlightResult,
    flights.AircraftName,
    flights.DepartureIcaoName,
    flights.ArrivalIcaoName
    from
    flights
    inner join regular
    on regular.Departure = SUBSTRING(flights.DepartureIcaoName,1,4) and regular.Arrival = SUBSTRING(flights.ArrivalIcaoName,1,4);";

我有:

('444 737vvv', 'LFLL gee', 'LPMAdsf', 200, 2000, 12),
    ('gg737vvv', 'LPMA-egege', 'LFLLdsf', 3000, 0, 13),
    ('747vvv', 'LFLLèèegege', 'LPMAdsf', 0, 5000, 15),
    ('a320vvv', 'EGKK-egege', 'LFPOdd', 0, 6000, 14)

我想要:

('444 737vvv', 'LFLL gee', 'LPMAdsf', 200, 2000, 12),
    ('gg737vvv', 'LPMA-egege', 'LFLLdsf', 3000, 0, 13),
    ('747vvv', 'LFLLèèegege', 'LPMAdsf', 0, 5000, 15),

我认为(但不工作):

$query = "Select 
flights.*, regular.* 
from flights, regular 
where regular.Departure = SUBSTRING(flights.DepartureIcaoName,1,4) 
and regular.Arrival = SUBSTRING(flights.ArrivalIcaoName,1,4) 
and SUBSTRING(flights.DepartureIcaoName,1,4) = (SUBSTRING(flights.ArrivalIcaoName,1,4) - 1)
";

【问题讨论】:

标签: php sql row next


【解决方案1】:

另一种查询方式是:

SELECT
    flights.name,
    flights.Departure
FROM
    flights
    INNER JOIN Table2
        ON CONCAT(Table2.Dep,Table2.Arri) = CONCAT(SUBSTRING(flights.Departure,1,4),SUBSTRING(flights.Arrival,1,4));

但它产生相同的结果。

问题在于,在您的示例中,a320vvv 航班在航班中有一个出发-到达对字符串 EGKK LFPO,而在表 2 中,您同时拥有 EGKK LFPO 和 LFPO EGKK。所以查询是正确的。

确实,如果你做 SELECT * 你会看到结果是:

其中所选航班是 com 航班,EGKK LFPO 出发到达,而不是货物航班,其出发到达 LFPO EGKK。

问候

猜你喜欢
  • 2016-06-29
  • 2010-11-18
  • 2014-10-29
  • 2017-06-20
  • 2013-08-19
  • 2012-06-12
  • 2020-02-21
  • 2015-12-17
相关资源
最近更新 更多