Mysql 如果WHERE条件未返回结果,请尝试其他条件?

Mysql 如果WHERE条件未返回结果,请尝试其他条件?,mysql,sql,Mysql,Sql,我不想要这个: SELECT * FROM table WHERE condition1 OR condition2 OR condition3 SELECT * FROM table WHERE condition1 (if no result) try condition2 (if no result) try condition3 相反,我想要这个: SELECT * FROM table WHER

我不想要这个:

SELECT * FROM table
WHERE condition1
OR condition2
OR condition3    
SELECT * FROM table
WHERE condition1
    (if no result)
        try condition2
            (if no result)
                try condition3
相反,我想要这个:

SELECT * FROM table
WHERE condition1
OR condition2
OR condition3    
SELECT * FROM table
WHERE condition1
    (if no result)
        try condition2
            (if no result)
                try condition3

我如何在MySQL中编写这个?因此,如果找到结果,则不要尝试下面的条件。

如果您的目标是了解满足了哪些条件,则可以使用如下联合查询:

SELECT *, 1 as `condition` FROM table WHERE <condition1>
UNION
SELECT *, 2 as `condition` FROM table where <condition2>
UNION
...more conditions
您可以像这样使用UNION:

SELECT *
FROM table
WHERE condition1

UNION

SELECT *
FROM table
WHERE condition2 AND NOT EXISTS (SELECT 1 FROM table WHERE condition1)

UNION 

SELECT *
FROM table
WHERE condition3 AND NOT EXISTS (SELECT 1 FROM table WHERE condition1) AND
                     NOT EXISTS (SELECT 1 FROM table WHERE condition2)
如果第一个选择retuns任意行,那么第二个和第三个将不返回任何行。否则,如果第二个SELECT重新运行任何行,则第三个SELECT将不返回任何行。否则,从第三个选择中获取结果

MySQL 5.5.32架构设置:

问题1:

:


您还可以尝试使用WHERE EXISTS语句,如下所示:

SELECT * FROM table
WHERE EXISTS
{Condition 1}
OR EXISTS
{Condition 2}
...more conditions

你可以避免这样的结合:

WHERE condition1 
OR (condition2 AND NOT EXISTS (SELECT 1 FROM table WHERE condition1))
OR (condition3 AND NOT EXISTS (SELECT 1 FROM table WHERE condition1)
       AND NOT EXISTS (SELECT 1 FROM table WHERE condition2)
   )

你为什么要这样做?我们需要知道你为什么要这样做。听起来您正在尝试优化查询速度。如果没有结果,是否适用于每行或给定条件下的整个集合?非常聪明,但仍然有味道:-@Kaii我同意,但解决这样的小难题总是很有趣的=SELECT COUNT*在InnoDB中的性能非常差。这是一个有效的解决方案,但也是计算开销最大的解决方案!对于一个有效的解决方案,我给出-1,这个解决方案低于所有其他已经发布的解决方案。很抱歉问题是,它看起来不错。但它的性能很差——新手可能会认为这是一种聪明的方法。但事实并非如此。这很痛苦。好吧,现在我们无法给出其他尚未发布的有效解决方案……可怜的是,您可以给出任意多的有效解决方案。只要你让社区决定哪一个是好的,哪一个是坏的:祝你好运,停止报复投票。感谢您的公平。问题是添加条件列会使每个查询的结果集与其他查询不同,因此这将显示所有查询的结果。
SELECT * FROM table
WHERE EXISTS
{Condition 1}
OR EXISTS
{Condition 2}
...more conditions
WHERE condition1 
OR (condition2 AND NOT EXISTS (SELECT 1 FROM table WHERE condition1))
OR (condition3 AND NOT EXISTS (SELECT 1 FROM table WHERE condition1)
       AND NOT EXISTS (SELECT 1 FROM table WHERE condition2)
   )