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 Yes
和 No
)和 No
如果您没有匹配项(内部查询的结果将仅为 No
)。
希望对您有所帮助。
我一直在尝试寻找一种方法来获得 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 Yes
和 No
)和 No
如果您没有匹配项(内部查询的结果将仅为 No
)。
希望对您有所帮助。