Mysql 当存在外部命令BY时,我是否需要内部命令BY?
我的问题是:Mysql 当存在外部命令BY时,我是否需要内部命令BY?,mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,我的问题是: ( SELECT id, table_code, seen, date_time FROM events WHERE author_id = ? AND seen IS NULL ) UNION ( SELECT id, table_code, seen, date_time FROM events WHERE author_id = ? AND seen IS NOT NULL LIMIT 2 ) UNION ( SELECT id, table_code,
( SELECT id, table_code, seen, date_time FROM events
WHERE author_id = ? AND seen IS NULL
) UNION
( SELECT id, table_code, seen, date_time FROM events
WHERE author_id = ? AND seen IS NOT NULL
LIMIT 2
) UNION
( SELECT id, table_code, seen, date_time FROM events
WHERE author_id = ?
ORDER BY (seen IS NULL) desc, date_time desc -- inner ORDER BY
LIMIT 15
)
ORDER BY (seen IS NULL) desc, date_time desc; -- outer ORDER BY
正如您所看到的,有一个外部的ORDER BY
,其中一个子查询也有自己的ORDER BY
。我认为子查询中的排序依据是无用的,因为最终结果将按外部结果排序。我说得对吗?或者内部的排序依据
对排序有任何影响
还有关于上面查询的第二个问题:实际上,我只需要
id
和table\u code
。我选择了seen
和date\u time
仅用于外部ORDER BY
,我能做得更好吗?当查询中有限制时,您需要内部ORDER BY
。因此,第三个子查询是根据orderby选择15行
一般来说,如果您有限制
,则应使用按
订购。如果您正在学习数据库,则尤其如此。您可能似乎得到了正确的答案——然后在以后某个时间点它不起作用时会感到非常惊讶。仅仅因为某些东西似乎有效并不意味着它就一定有效
外部order by只对子查询返回的所有行进行排序。您需要内部的order by
,因为它与limit
子句成对出现@ᴳᵁᴵᴰᴼ 哦我真的不在乎这个。。!谢谢。所以我的第二个子查询也需要一个
ORDER BY,对吗?@堆栈,除非你想要任意两行符合这些条件,那么是的。