SELECT UNION和ORDER BY在mysql ..如何?
技术问答
254 人阅读
|
0 人回复
|
2023-09-14
|
我想从单个表中获得所有的行,但以不同的方式排序。例如,我写 N, z) z0 Y% c" x
(SELECT * FROM table1ORDER BY fieldA ASC LIMIT 3)UNION(SELECT * FROM table1ORDER BY FieldB DESC)它的工作原理是忽(FIELDB DESC)的二阶…有人知道为什么吗?, B2 s' u) @# C" b) u' C8 o# O2 j
! ~; P/ a1 N' L* p( P- P 解决方案:
% w: y- m$ M" B 的UNION作为联合操作的一部分,操作员执行隐含的排序(IIRC,在键列(多个))。5 H. ]* x% N% b, v
如果要对结果进行其他排序,则必须应用于ORDER BY联合选择。
- ~+ U+ E0 q! k( J6 P在你的情况下,你需要以某种方式区分第一个选择项和第二个选择项,这样你就可以正确地订购联合。如(未经测试):" H7 h+ u; i- R/ |, k
(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这种方法的问题是,您将在第一个查询部分中选择三行重复项UNION(因为列不完全匹配)。
" t+ }3 G+ y3 B4 T你确定不能用两个SELECT语句吗? |
|
|
|
|
|