【问题标题】:Order fields in UNION queryUNION 查询中的订单字段
【发布时间】:2017-06-08 04:46:49
【问题描述】:

我正在尝试在 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

我该怎么做?当然,如果我分别执行这两个查询,它可以工作,但我需要它们在同一个查询中。

【问题讨论】:

  • 一旦问题得到满意的回答,接受这个答案会很有帮助

标签: mysql sql-order-by union


【解决方案1】:

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

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

输出:

演示在这里:

Rextester

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多