[英]SQL Yes/No query without control flow functions (IF,CASE,COALESCE etc)
我一直在尝试找到一种无需使用控制流功能(IIF,ELSE,CASE,COALESCE,ISNULL,IFNULL等)就可以对查询回答是/否的方法。 我希望我的查询给我一个“是”的答案,如果某特定航空公司在两个给定机场之间的给定日期有航班。 这是我到目前为止所做的
SELECT 'Yes' as Answer
FROM flights
WHERE flights.date = '2014-12-12' AND flights.routes_id IN (SELECT routes.id
FROM routes
INNER JOIN airlines
ON airlines.id = routes.airlines_id
WHERE airlines_id IN (SELECT airlines.id
FROM airlines
WHERE airlines.name='Olympic Airways')
AND routes.source_id = (SELECT airports.id
FROM airports
WHERE airports.name like '%Venizelos%')
AND routes.destination_id=(SELECT airports.id
FROM airports
WHERE airports.name like 'London Gatwick'))
UNION
SELECT 'No' AS Answer
FROM flights
WHERE flights.date = '2014-12-12' AND flights.routes_id NOT IN (SELECT routes.id
FROM routes
INNER JOIN airlines
ON airlines.id = routes.airlines_id
WHERE airlines_id IN (SELECT airlines.id
FROM airlines
WHERE airlines.name = 'Olympic Airways')
AND routes.source_id = (SELECT airports.id
FROM airports
WHERE airports.name like '%Venizelos%')
AND routes.destination_id=(SELECT airports.id
FROM airports
WHERE airports.name like 'London Gatwick'))
问题是,当我运行查询时,它会同时打印“是”和“否”,而当它只打印这两个之一时。 如何解决?
发生这种情况的原因是,那天将有该航空公司的航班飞往其他机场,也有其他航空公司的航班往返该机场。
将您的查询放在另一个查询中,例如:
SELECT Max(Answer)
from (
your query from the question
)
这将返回Yes
,如果你有在执法机关良好的飞行(因为内部查询将返回Yes
和No
),并No
如果只有不匹配(从内部查询的结果将是只No
)。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.