我有这样的查询:
(SELECT * FROM something WHERE ...) UNION (SELECT * FROM something WHERE ...)
因为我希望第一个SELECT
的结果排在首位。但是,第二部分以相反的顺序出现。我不能简单地订购整个查询,因为它会将我需要的第一个SELECT
推到顶部...所以我想做这样的事情:
(SELECT * FROM something WHERE ...) UNION (SELECT * FROM something WHERE ... ORDER BY timestamp DESC)
但这不起作用,ORDER BY
完全被忽略;我通过插入乱码来测试这个,ORDER BY dosaif30h
仍然有效...一个解决方案是做两个单独的查询,但我更喜欢在一个处理它。
答案 0 :(得分:2)
SELECT * FROM something WHERE ... UNION SELECT * FROM (SELECT * FROM something WHERE ... ORDER BY timestamp DESC)a
答案 1 :(得分:1)
如果你想在一个订单中订购它们,那么你需要这样的东西:
SELECT * FROM (
SELECT * FROM table_1 where something
UNION
SELECT * FROM table_2 WHERE something
) as tt
ORDER BY something
请注意,两个表都应具有相同的列名和计数。
如果您只想订购第二个查询,那么:
SELECT * FROM table_1 where something
UNION
SELECT * FROM (SELECT * FROM table_2 WHERE something ORDER BY something) as tt
答案 2 :(得分:1)
如果您希望第一个表首先出现,那么您需要明确订购:
SELECT s.*
FROM ((SELECT s.*, 1 as which FROM something s WHERE ...)
UNION ALL
(SELECT s.*, 2 as which FROM something s WHERE ...)
) s
ORDER BY which, timestamp DESC
在大多数情况下,您只能信任外部查询中的order by
,如果您希望以特定顺序显示结果。
注意:如果您愿意,可以在没有子查询的情况下编写:
SELECT s.*, 1 as which FROM something s WHERE ...
UNION ALL
SELECT s.*, 2 as which FROM something s WHERE ...
ORDER BY which, timestamp;