UNION查询中的订单字段

时间:2017-06-08 04:46:50

标签: mysql sql-order-by union

我试图在两个查询之间在MySQL中进行联合查询。但是,每个查询都按不同的字段排序,我只需要在一个查询中进行查询。这可能吗?

例如,我有这张表:

table

------
A | B
------
1 | 3
------
2 | 2
------
3 | 1

我尝试过这个查询:

(SELECT A, B)
    FROM table 
    ORDER BY A)
UNION
(SELECT A, B)
    FROM table 
    ORDER BY B)

我希望得到这样的东西:

A | B
------
1 | 3
------
2 | 2
------
3 | 1
------
3 | 1
------
2 | 2
------
1 | 3

但是,除此之外,我得到了两个查询的联合而没有排序,如下所示:

A | B
------
1 | 3
------
2 | 2
------
3 | 1
------
1 | 3
------
2 | 2
------
3 | 1

我该怎么办?当然,如果我单独进行两个查询,它就可以工作,但我需要在同一个查询中。

1 个答案:

答案 0 :(得分:2)

您可以引入一个额外的列来跟踪联合的每一侧,然后根据需要使用它。

SELECT t.A, t.B
FROM
(
    SELECT A, B, 'A' AS source
    FROM yourTable
    UNION ALL
    SELECT A, B, 'B'
    FROM yourTable
) t
ORDER BY
    t.source,
    CASE WHEN t.source = 'A' THEN A ELSE B END

<强>输出:

enter image description here

在这里演示:

Rextester