我正在使用UNION运算符从两个不同的表中选择结果。我希望第一个表结果的结果来自第二个表的结果。
例如:我有表customer_coupons和segment_coupons。两个表都有一个名为coupon_id的列。当我运行涉及这两个表的UNION的查询时,它返回正确的记录,但它们不是我想要的顺序:它给了我两个表的coupon_ids按升序混合,但我想显示所有coupon_ids的第一个表,然后是第二个表的所有coupon_ids。
以下是当前存在的查询:
SELECT coupon_id 来自customer_coupons 联盟 SELECT coupon_id 来自segment_coupons;
如何更改此设置,以便查询前半部分的所有结果都来自下半部分的所有结果?
答案 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