如果select * from table where x=1返回0行,那么我需要select * from table where x=2 [or some other query]。是否可以在带有条件语句的单个MySQL查询中执行此操作?
select * from table where x=1
select * from table where x=2 [or some other query]
编辑: 所有答案均UNION有效,但前提是两个查询均从同一表(或具有相同列数的表)中选择。如果第二个查询应用于具有联接的其他表上怎么办?
UNION
让我写下我的查询以使问题更清楚:
SELECT table1.a, table2.b from table1 LEFT JOIN table2 ON table2.x= table1.x WHERE .....
如果第一个结果为空,则:
SELECT table1.a FROM table1 WHERE ....
如果返回第一个查询,我将使用第一个查询的行,否则将使用第二个查询。
从我刚刚进行的快速测试来看,这似乎可行,并且无需检查x=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兼容才能起作用。
您更新的问题的答案是“否”。这在单个查询中是不可能的。您将需要使用一些条件过程逻辑来执行所需的查询。