一尘不染

MYSQL如果选择查询返回0行,那么另一个选择查询?

mysql

如果select * from table where x=1返回0行,那么我需要select * from table where x=2 [or some other query]。是否可以在带有条件语句的单个MySQL查询中执行此操作?

编辑: 所有答案均UNION有效,但前提是两个查询均从同一表(或具有相同列数的表)中选择。如果第二个查询应用于具有联接的其他表上怎么办?

让我写下我的查询以使问题更清楚:

第一:

SELECT  table1.a, table2.b  from table1 LEFT JOIN table2 ON table2.x= table1.x
WHERE .....

如果第一个结果为空,则:

第二名:

SELECT table1.a FROM table1 
WHERE ....

如果返回第一个查询,我将使用第一个查询的行,否则将使用第二个查询。


阅读 520

收藏
2020-05-17

共1个答案

一尘不染

从我刚刚进行的快速测试来看,这似乎可行,并且无需检查x=1两次是否存在。

SELECT SQL_CALC_FOUND_ROWS *
FROM mytable
WHERE x = 1

UNION ALL

SELECT *
FROM mytable
WHERE 
FOUND_ROWS() = 0 AND x = 2;

编辑:在您对问题的澄清后,显然上述两个查询需要与UNION兼容才能起作用。

您更新的问题的答案是“否”。这在单个查询中是不可能的。您将需要使用一些条件过程逻辑来执行所需的查询。

2020-05-17