此SQL代码用于检索仅在一个区域内飞行的航班,即AK
表机场包含AirportID,AirportDetail
表格航班包含FlightNum,TakeOff,ArriveID
SELECT DISTINCT FlightNum, TakeOffID, ArriveID
FROM flights
INNER JOIN airports
ON AirportID = ArriveID AND AirportID = TakeOffID
WHERE AirportDetail LIKE '%AK%'
答案 0 :(得分:1)
也许你只需要两次加入机场......
SELECT DISTINCT F.FlightNum, F.OriginAirportID, F.DestAirportID, Dest.*, Orig.*
FROM flight F
INNER JOIN airport Dest
ON Dest.AirportID = F.DestAirportID
INNER JOIN airport Orig
ON orig.AirportID = F.OriginAirportID
WHERE (Dest.AirportDescription LIKE BINARY '%AK%'
AND Orig.AirportDescription LIKEBINARY '%AK%')
根据评论:OP要求所有航班起飞并在阿拉斯加设有目的地。
鉴于这种理解,我相信所需要的是一个AND而不是一个或在where子句中,我相信我在F.Airport中错误,正如评论中所指出的那样。这两项调整都已得到纠正。现在,由于在AirportDescription中跟踪了“STATE”,因此将返回原点和目的地中包含AK的任何内容。
答案 1 :(得分:0)
SELECT * FROM flight
WHERE DestAirportID IN (
SELECT AirportID FROM airport WHERE AirportDescription LIKE '%AK%'
) AND OrigAirportID IN (
SELECT AirportID FROM airport WHERE AirportDescription LIKE '%AK%'
);
但要记住的一件事是,MySql(通常)不区分大小写。这意味着如果字符串'ak'在Description字段中出现 where ,它将匹配WHERE子句。虽然'ak'并不常见,但这可能会带来重大问题(DE,AR,CA,OR等),在机场表中有一个专用的“州”栏目会更好。所以更好的查询是:
SELECT *
FROM flight
INNER JOIN airport Orig
ON flight.OriginAirportID = Orig.AirportID
INNER JOIN airport Dest
ON flight.DestAirportID = Dest.AirportID
WHERE Orig.AirportState = 'AK'
AND Dest.AirportState = 'AK'