Sql Union All*with*"distinct"

hig*_*tow 36 sql union distinct union-all

UNION连接两个结果并删除重复项,而UNION ALL不删除重复项.UNION还对最终输出进行排序.

我想要的是没有重复且没有排序的UNION ALL.那可能吗?

这样做的原因是我希望第一个查询的结果位于最终结果之上,而第二个查询位于底部.(并且每个分类就好像它们单独运行一样)

Mar*_*ith 50

我注意到这个问题得到了很多观点,所以我首先要提出一个你没有问过的问题!

关于标题.要实现"Sql Union All with "distinct"",那么只需替换UNION ALLUNION.这具有删除重复的效果.

对于您的具体问题,给出澄清"第一个查询应该具有"优先级",因此应从底部删除重复"您可以使用

SELECT col1,
       col2,
       MIN(grp) AS source_group
FROM   (SELECT 1 AS grp,
               col1,
               col2
        FROM   t1
        UNION ALL
        SELECT 2 AS grp,
               col1,
               col2
        FROM   t2) AS t
GROUP  BY col1,
          col2
ORDER  BY MIN(grp),
          col1  
Run Code Online (Sandbox Code Playgroud)


Dam*_*ver 10

"UNION也对最终输出进行排序" - 仅作为实现工件.这是没有办法保证执行排序,如果你需要一个特定的排列顺序,你应该以指定它ORDER BY的条款.否则,输出顺序是服务器提供的最方便的输出顺序.

因此,您对执行UNION ALL但删除重复项的函数的请求很容易 - 它被调用UNION.


从您的澄清中,您似乎也相信a UNION ALL将在后续查询的结果之前返回第一个查询的所有结果.这不能保证.同样,实现特定订单的唯一方法是使用ORDER BY子句指定它.