mysql - 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
一定会有更好的办法。完成此任务的最佳和最有效的查询是什么?
解决方案
在 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,则该行将首先返回。
推荐阅读
- spring-boot - 添加消息存储spring集成dsl
- javascript - 在 Azure 函数中初始化 i18next
- swift - 为什么图像不缩放到 NSImageView
- ios - 从位置唤醒应用程序后,didFinishLaunchingWithOptions 中的 LaunchOptions 为零
- python - Python 不使用最新包
- git - 如何在 Vs 2009 的工具栏上显示 Git 扩展菜单?
- java - public static AutocompleteSessionToken newInstance() 是否返回相同的实例?
- c++ - 从 std::vector 继承的 C++ 虚拟析构函数
- c++ - 用用户定义的类型 UDT 实例化 std::atomic<>。如果UDT有虚函数的话,墨迹会失败,为什么?
- reactjs - 使用 React Jest Enzyme - 如何使用 Shallow 将构造函数对象传递给我的组件?