对原始表组合两个表的UNION查询的结果进行排序

时间:2013-05-24 14:39:30

标签: mysql sql union

我正在使用UNION运算符从两个不同的表中选择结果。我希望第一个表结果的结果来自第二个表的结果。

例如:我有表customer_coupons和segment_coupons。两个表都有一个名为coupon_id的列。当我运行涉及这两个表的UNION的查询时,它返回正确的记录,但它们不是我想要的顺序:它给了我两个表的coupon_ids按升序混合,但我想显示所有coupon_ids的第一个表,然后是第二个表的所有coupon_ids。

以下是当前存在的查询:

SELECT coupon_id 来自customer_coupons 联盟 SELECT coupon_id 来自segment_coupons;

如何更改此设置,以便查询前半部分的所有结果都来自下半部分的所有结果?

2 个答案:

答案 0 :(得分:1)

放入固定的表格识别字段:

(SELECT 1 AS source_table, coupon_id
FROM customer_coupons)

UNION ALL

(SELECT 2 AS sourcE_table, coupon_id
FROM segment_coupons)

ORDER BY source_table, coupon_id

请注意各个查询的括号。这会强制MySQL将order by应用于union的结果,而不是2子查询。

答案 1 :(得分:0)

SELECT * FROM (
SELECT coupon_id, 1 as myorder
FROM   customer_coupons
UNION
SELECT coupon_id 2 as myorder
FROM   segment_coupons)
Order by myorder