在mysql中选择UNION和ORDER BY ..怎么样?

sti*_*ghy 8 mysql sql

我想从单个表中获取所有行,但是以不同的方式对它们进行排序.比如说我写

(SELECT * FROM table1
ORDER BY fieldA ASC LIMIT 3
)
UNION
(
SELECT * FROM table1
ORDER BY FieldB DESC
)
Run Code Online (Sandbox Code Playgroud)

它的工作原理是,(FIELDB DESC)的二阶被忽略了...有人知道为什么?谢谢

Ben*_*n M 17

UNION运算符执行一个隐含的排序作为联合操作的一部分(IIRC,在键列(多个)).

如果要在结果中进行其他排序,则必须应用ORDER BY联合选择.

在您的情况下,您需要某种方式来区分第一个选择和第二个选择,以便您可以正确地订购联合.像(未经测试)的东西:

(SELECT table1.*, 0 AS TMP_ORDER FROM table1 ORDER BY fieldA ASC LIMIT 3)
UNION
(SELECT table1.*, 1 AS TMP_ORDER FROM table1)
ORDER BY TMP_ORDER ASC, 
CASE WHEN TMP_ORDER = 0 THEN fieldA ELSE 0 END ASC, 
CASE WHEN TMP_ORDER = 1 THEN fieldB ELSE 0 END DESC
Run Code Online (Sandbox Code Playgroud)

这种方法的问题在于,对于作为第一个查询的一部分选择的三行,您将有重复项UNION(因为列不完全匹配).

你确定你不能使用两个SELECT语句吗?