UNION
语义是重复被删除。 PostgreSQL使用Hash函数来删除重复项,结果按键的哈希顺序排序。
您可以使用UNION ALL
,但SQL仍然不保证订单,除非您使用ORDER BY
子句。
EXPLAIN
SELECT 'TEST1'
UNION SELECT 'TEST2'
UNION SELECT 'TEST3'
产地:
HashAggregate (cost=0.07..0.10 rows=3 width=0)
-> Append (cost=0.00..0.06 rows=3 width=0)
-> Subquery Scan on "*SELECT* 1" (cost=0.00..0.02 rows=1 width=0)
-> Result (cost=0.00..0.01 rows=1 width=0)
-> Subquery Scan on "*SELECT* 2" (cost=0.00..0.02 rows=1 width=0)
-> Result (cost=0.00..0.01 rows=1 width=0)
-> Subquery Scan on "*SELECT* 3" (cost=0.00..0.02 rows=1 width=0)
-> Result (cost=0.00..0.01 rows=1 width=0)
而
EXPLAIN
SELECT 'TEST1'
UNION ALL SELECT 'TEST2'
UNION ALL SELECT 'TEST3'
产地:
Append (cost=0.00..0.06 rows=3 width=0)
-> Subquery Scan on "*SELECT* 1" (cost=0.00..0.02 rows=1 width=0)
-> Result (cost=0.00..0.01 rows=1 width=0)
-> Subquery Scan on "*SELECT* 2" (cost=0.00..0.02 rows=1 width=0)
-> Result (cost=0.00..0.01 rows=1 width=0)
-> Subquery Scan on "*SELECT* 3" (cost=0.00..0.02 rows=1 width=0)
-> Result (cost=0.00..0.01 rows=1 width=0)
仅供参考 - MS SQL 08返回1,2,3,我所期待。 – asawyer 2011-02-17 19:30:25
疯狂的猜测,尝试`联合所有`` – 2011-02-17 19:31:15