SQL使用UNION合并NEWID排序查询 随机抽取男女员工报错解决方案
报错原因
你编写的SQL不符合UNION的语法规则:UNION/UNION ALL用于合并多个查询结果时,仅允许在整段语句的末尾加一个全局ORDER BY子句,不允许在每个子查询内部单独使用ORDER BY(除非将子查询逻辑嵌套封装)。
解决方案
将每个性别随机取2条的逻辑封装为独立的子查询,再合并结果即可,示例代码(适配SQL Server)如下:
SELECT * FROM ( SELECT TOP 2 * FROM employees WHERE gender = 'F' ORDER BY NEWID() ) female_emp UNION ALL SELECT * FROM ( SELECT TOP 2 * FROM employees WHERE gender = 'M' ORDER BY NEWID() ) male_emp
补充说明
- 这里使用
UNION ALL而非UNION,是因为男女员工结果集不存在重复数据,不需要额外去重,执行效率更高 - 如果你使用的是其他数据库,仅需要替换随机排序函数即可:
- MySQL:将
NEWID()替换为RAND() - PostgreSQL:将
NEWID()替换为RANDOM() - Oracle:将
NEWID()替换为DBMS_RANDOM.VALUE()
- MySQL:将
内容的提问来源于stack exchange,提问作者TomuRain
相关产品推荐
相关产品推荐

