首页 > 解决方案 > MySQL选择顺序,其中多列是条件

问题描述

我想要做:

SELECT * FROM table WHERE id1 = '123' OR id2= '456' OR id3 = '789' LIMIT 1;

可能有多个匹配项,如果是这种情况,我希望首先返回来自 id1 的匹配,其次返回来自 id2 的匹配,最后返回来自 id3 的匹配。

我知道我可以通过 3 个查询来完成此操作,例如:

SELECT * FROM table WHERE id1 = '123' LIMIT 1

如果没有匹配,则:

SELECT * FROM table WHERE id2 = '456' LIMIT 1

如果没有匹配,则:

SELECT * FROM table WHERE id3 = '789' LIMIT 1

一定会有更好的办法。完成此任务的最佳和最有效的查询是什么?

标签: mysqlsql

解决方案


在 MySQL 中,您可以通过布尔表达式进行排序。我认为它们被转换为 0 和 1,因此通过降序排序,您可以首先获得“真实的”值。这样你就可以一个接一个地按三个表达式排序:

SELECT * FROM table 
WHERE id1 = '123' OR id2= '456' OR id3 = '789' 
ORDER BY 
  id1 = '123' DESC,
  id2 = '456' DESC, 
  id3 = '789' DESC 
LIMIT 1;

这甚至比单独的查询更进一步,因为如果有一行匹配所有三个 id,则该行将首先返回。


推荐阅读