SQL Yes/No 没有控制流函数(IF、CASE、COALESCE 等)的查询

SQL Yes/No query without control flow functions (IF,CASE,COALESCE etc)

我一直在尝试寻找一种方法来获得 Yes/No 查询答案而不使用控制流函数(IIF、ELSE、CASE、COALESCE、ISNULL、IFNULL 等)。如果在给定日期的 2 个给定机场之间有某家航空公司的航班,我希望我的查询给我一个 "Yes" 答案。这是我到目前为止所做的

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'))

问题是,当我 运行 查询时,它会同时打印是和否,但它应该只打印这两个中的一个。 如何修复?

发生这种情况是因为在那一天会有该航空公司的航班,但也会有其他航空公司的航班,from/to那个机场也会有其他航空公司的航班。

将您的查询放入另一个查询中,例如:

SELECT Max(Answer)
from (
      your query from the question
)

这将 return Yes 如果您至少有一个好的航班(因为内部查询将 return YesNo)和 No 如果您没有匹配项(内部查询的结果将仅为 No)。

希望对您有所帮助。