条件多列的MySQL选择顺序

时间:2018-12-03 07:12:47

标签: mysql sql

我想做:

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

必须有更好的方法。什么是最好的和最有效的查询来完成此任务?

1 个答案:

答案 0 :(得分:2)

在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都匹配的行,则会首先返回该行。