我一直在尝试找到一种方法来获得查询的是/否答案,而不使用控制流函数(IIF、ELSE、CASE、COALESCE、ISNULL、IFNULL 等)。如果在给定日期在 2 个给定机场之间有某个航空公司的航类,我希望我的查询能够得到"is"的答案。这就是我到目前为止所做的
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'))
问题是,当我运行查询时,它会打印"is"和“否”,而它应该只打印这两者之一。 如何解决?
最佳答案
发生这种情况是因为当天会有该航空公司的航类,也有其他航空公司的航类,往返于该机场,也有来自其他机场的航类。
将您的查询放入另一个查询中,例如:
SELECT Max(Answer)
from (
your query from the question
)
如果您至少有一个良好的航类,这将返回 Yes
(因为内部查询将返回 Yes
和 No
)和 否
,如果您没有匹配项(内部查询的结果将仅为否
)。
希望这有帮助。
关于mysql - SQL 是/否查询,不带控制流函数(IF、CASE、COALESCE 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29990619/