mysql - SQL 是/否查询,不带控制流函数(IF、CASE、COALESCE 等)

标签 mysql sql mysql-workbench

我一直在尝试找到一种方法来获得查询的是/否答案,而不使用控制流函数(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(因为内部查询将返回 YesNo)和 ,如果您没有匹配项(内部查询的结果将仅为)。

希望这有帮助。

关于mysql - SQL 是/否查询,不带控制流函数(IF、CASE、COALESCE 等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29990619/

相关文章:

java - 捕获有意义的 sql 异常的正确方法

sql - 在 SQL Server 中通过 xsd 验证空 xml

mysql工作台不显示下一个结果按钮

mysql - 使用 MySQL Workbench(或其他)通过代理通过 SSH 连接到 MySQL

mysql - 使用自增主键作为外键

mysql - 让 MySQL 在 OSX 10.7 Lion 上运行

php - Raspberry Pi phpmyadmin 显示源代码而不是实际界面

mysql - 需要帮助加快此查询

python - 基于逻辑条件的 Pandas DataFrame 切片?

Python+SQL : How to execute a procedure from python? [不调用存储过程]