在MySQL中是否可能仅在条件不返回两个连续查询的情况下不添加结果的情况下添加WHERE条件?

因此,基本上我正在寻找的是:

请考虑下表:Currencies

| CurrencyId | CurrencyCode | CurrencyName         |
----------------------------------------------------
| 1          | EUR          | Euro                 |
| 2          | USD          | United States Dollar |
| 3          | GBP          | Great Brittain Pond  |
| 4          | RON          | Romanian New Lei     |
----------------------------------------------------


考虑以下查询:

SELECT * FROM Currencies WHERE (CurrencyCode LIKE '%RO%' OR CurrencyName LIKE '%RO%') AND CurrencyId <= 4


该查询将返回第1行(欧元包含“ ro”)和第4行(RON包含“ RO”)。我想要实现的是编写一个查询,该查询首先仅运行第一个LIKE语句,如果有结果,它将忽略第二个LIKE语句,否则将尝试第二个LIKE语句。在这两种情况下,查询都应运行其他条件。因此,基本上,上述查询如果被重写,则应仅返回第4行。

这在MySQL中可能吗?

最佳答案

获取两行,然后选择首选行:

SELECT ...
    FROM ...
    WHERE ( ... LIKE ... OR ... LIKE ... )
      AND ...
    ORDER BY CurrencyCode LIKE '%RO%' DESC
    LIMIT 1;


LIKE返回true / false,可以将其视为1/0,因此DESC

如果有多个匹配代码,则将首先返回它们,但不按特定顺序返回。

如果要优先选择“代码”和“名称”匹配的行,则

    ORDER BY CurrencyCode LIKE '%RO%' DESC,
             CurrencyName LIKE '%RO%' DESC


(有关此更改,另请参见CASE ...。)

改性

根据新规范...

( SELECT ... WHERE CurrencyCode LIKE ... )
UNION ALL
( SELECT ... WHERE CurrencyName LIKE ...
               AND NOT EXISTS ( SELECT 1
                        WHERE CurrencyCode LIKE ... ) )


第一个SELECT将获取所有匹配的代码(如果有)。
如果有任何匹配的代码,第二个SELECT将失败,否则将提供匹配的名称。

您可以在每个ORDER BY或末尾添加SELECT

关于mysql - MySQL-查询条件,仅在另一个查询条件未返回结果时触发,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47177007/

10-12 00:20
查看更多