首页 > 解决方案 > 使用联合优化 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 值

问题: 有没有更好、更有效的方法来组合一个返回相同结果的查询?

任何帮助,将不胜感激!

标签: sqlunion

解决方案


如果我理解正确,您在这里不需要联合,您可以只做一个不同的选择:

SELECT DISTINCT notification
FROM NotificationDb
WHERE status = 1 AND module = 1 AND proc_name IN ('a', 'b')
ORDER BY
    proc_name,
    param1 DESC;

在这里,我们添加一个ORDER BYa proc_name记录放在前面的子句b。然后,在所有b记录中,我们首先显示较大的param1记录。这种排序保持了您在当前联合查询中的感知顺序(尽管应该注意没有这样的实际顺序;如果您希望在结果集中进行某种排序,请始终使用子句)。ORDER BY


推荐阅读