使用 Union 优化 SQL Select

Optimization for SQL Select with Union

我有以下 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 值排序

问题:是否有更好、更有效的方法来组合一个查询return相同的结果?

如有任何帮助,我们将不胜感激!

如果我没理解错的话,你在这里不需要联合,你可以只做一个不同的 select:

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 条记录。这种排序保持了你在当前联合查询中的感知顺序(尽管应该注意没有这样的实际顺序; always 如果你期望一个特定的 ORDER BY 子句在结果集中排序)。