【问题标题】:SQL JOIN return record from table flights corresponding form table 2SQL JOIN从表航班对应的表2返回记录
【发布时间】:2016-03-08 14:47:24
【问题描述】:

我想列出航班表中出发和到达与表 2 相同的所有航班。 具体情况是Departure in flight是XXXX -dsdjqlkdjlqs or XXXXdkjfhkds etc...而表2中只有XXXX

代码:

    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 Table2
    (`Dep` varchar(21), `Arri` varchar(21),`Type` varchar(21))
;

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

我有测试:

        select flights.name,
       flights.Departure
from flights
where substr(flights.Departure, 1, 4) in (select Dep from table2) and 
substr(flights.Arrival, 1, 4) in (select Arri from table2)
;

例子:

我从 LFLL 飞往 LFPG

在表 2 中有航空公司:
LFLL LFPG
LFMT LFPO 等......

根据您的要求,如果我从 LFLL 飞往 LFPO,该航班会出现,但不会出现,因为 LFLL 到 LFPO 不是航空公司。

http://sqlfiddle.com/#!9/026d6

【问题讨论】:

    标签: mysql sql join inner-join


    【解决方案1】:

    我认为您正在寻找以下内容:

    Select
        flights.name,
        flights.Departure
    from
        flights
        inner join Table2
            on Table2.Dep = SUBSTRING(flights.Departure,1,4) and Table2.Arri = SUBSTRING(flights.Arrival,1,4)
    ;
    

    您需要 SUBSTRING 而不是通配符,因为您只需要 FLIGHTS 表条目的一部分。此外,您需要包括到达约束。

    【讨论】:

    • 你好 Peter,现在我要加入三个表:flights、table2 和 vafinance。餐桌航班和 vafinance 通过 ID 链接。我希望您请求提取航空公司在表 2 中的航班,但从表 vafinances 中提取。 (通过与表航班相同的 ID 链接)
    • 我想:$query = "Select vol.*, flight.*, regular.* from vol, flight, regular where regular.Departure = SUBSTRING(flights.DepartureIcaoName,1,4) 和regular.Arrival = SUBSTRING(flights.ArrivalIcaoName,1,4) 和 vol.id = flight.id" ;
    • 可以使用:$query = "Select SUM(beneficev) AS Sbenevicev, flight.*, regular.* from vol, flight, regular where regular.Departure = SUBSTRING(flights.DepartureIcaoName,1, 4) 和 regular.Arrival = SUBSTRING(flights.ArrivalIcaoName,1,4) 和 vol.id = flight.id GROUP BY UserName ORDER BY Sbeneficev DESC" ;
    • 您能帮我解决这个问题吗? stackoverflow.com/questions/35983344/sql-previous-next-row
    【解决方案2】:
    select flights.name,
           flights.Departure
    from flights
    inner join table2
    on substr(flights.Departure, 1, 4) = table2.Dep
    

    【讨论】:

      【解决方案3】:

      您只需要substrin

      select flights.name,
             flights.Departure
      from flights
      where substr(flights.Departure, 1, 4) in (select Dep from table2)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-27
        • 2022-01-14
        • 2021-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多