0

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

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

这是当前存在的查询:

SELECT coupon_id FROM customer_coupons UNION SELECT coupon_id FROM segment_coupons;

我怎样才能改变这一点,以便查询前半部分的所有结果都出现在后半部分的所有结果之前?

4

2 回答 2

2

放入一个固定的表识别字段:

(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联合的结果,而不是2子查询。

于 2013-05-24T14:42:17.497 回答
1
SELECT * FROM (
SELECT coupon_id, 1 as myorder
FROM   customer_coupons
UNION
SELECT coupon_id 2 as myorder
FROM   segment_coupons)
Order by myorder
于 2013-05-24T14:42:47.293 回答