sql - 使用联合优化 SQL 选择
问题描述
我有以下 SQL 查询,其中使用了 UNION:
SELECT notification FROM NotificationDb notification WHERE notification.proc_name = 'a' AND notification.status = 1 AND notification.module = 1
UNION
SELECT notification FROM NotificationDb notification WHERE notification.proc_name = 'b' AND notification.param1 >0 AND notification.status = 1 AND notification.module = 1
UNION
SELECT notification FROM NotificationDb notification WHERE notification.proc_name = 'b' AND notification.param1 <= 0 AND notification.status = 1 AND notification.module = 1
我以这种方式设置它,因为我需要它们按 proc_name 字段排序,并且还需要在 proc_name 为“b”的情况下使用 param1 值
问题: 有没有更好、更有效的方法来组合一个返回相同结果的查询?
任何帮助,将不胜感激!
解决方案
如果我理解正确,您在这里不需要联合,您可以只做一个不同的选择:
SELECT DISTINCT notification
FROM NotificationDb
WHERE status = 1 AND module = 1 AND proc_name IN ('a', 'b')
ORDER BY
proc_name,
param1 DESC;
在这里,我们添加一个ORDER BY
将a
proc_name
记录放在前面的子句b
。然后,在所有b
记录中,我们首先显示较大的param1
记录。这种排序保持了您在当前联合查询中的感知顺序(尽管应该注意没有这样的实际顺序;如果您希望在结果集中进行某种排序,请始终使用子句)。ORDER BY
推荐阅读
- reactjs - 如何在 React 应用程序中添加白板?
- sql-server - 多数据库搜索和更新
- mysql - 如何从同一列sql中分离日期和时间
- c++ - 为什么函数名称不能与返回名称类型相同?
- javascript - 有人可以像我五岁那样解释如何计算字符串中有多少个字母而不重复吗?
- flutter - 如何证明颤动列小部件中的文本?
- apache-kafka - Kafka - 集群范围是什么意思
- php - 如何从 JSON 数据中绘制谷歌折线图
- context-free-grammar - 我可以将两个符号推入下推自动机的堆栈吗?
- c# - 跟踪位置 Mapbox 将代码从 Java 回收到 Xamarin