我想从单个表中获取所有行,但是以不同的方式对它们进行排序.比如说我写
(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语句吗?
| 归档时间: |
|
| 查看次数: |
14888 次 |
| 最近记录: |