是否有可能在MySQL中添加一个WHERE条件,只有在前面的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行(Euro包含&#39; ro&#39;)和第4行(RON包含&#39; RO&#39;)。我想要实现的是编写一个查询,它首先只运行第一个LIKE语句,如果有结果,它会忽略第二个LIKE语句,否则,它会尝试第二个LIKE语句。在这两种情况下,查询都应该运行其他条件。所以基本上,上面的查询,如果重写,应该只返回第4行。
这在MySQL中是否有可能?
答案 0 :(得分:1)
获取两行,然后选择首选行:
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
。