SQL JOIN从表格飞行返回记录对应表格2

时间:2016-03-08 14:47:24

标签: mysql sql join inner-join

我希望在航班表中列出所有航班,其中出发和到达是表2的平台。 特殊情况是飞行中的出发时间是XXXX -dsdjqlkdjlqs或XXXXdkjfhkds等...而表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

3 个答案:

答案 0 :(得分:0)

select flights.name,
       flights.Departure
from flights
inner join table2
on substr(flights.Departure, 1, 4) = table2.Dep

答案 1 :(得分:0)

您需要的只是substrin

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

答案 2 :(得分:0)

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

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表条目。此外,您需要包含到达约束。