mysql中带有局部变量和随机化的limit union和order by子句的正确语法:错误(1221)
我试图创建一个随机样本(30-70),如下-:mysql中带有局部变量和随机化的limit union和order by子句的正确语法:错误(1221),mysql,union,where-clause,random-sample,sql-limit,Mysql,Union,Where Clause,Random Sample,Sql Limit,我试图创建一个随机样本(30-70),如下-: set @total=(select count(*) from tab_1 where predict_var ="4" or predict_var ="2" ) ; set @sample= (select @total*(70/30)) ; #@total,@sample #4090,9543.333331970 #发布本文后,我可以通过这种通用语法获取元素 但是,将这两个条件的并集视为此处的并集时,它不起作用。而且使用“预测”或“预
set @total=(select count(*) from tab_1 where predict_var ="4" or predict_var ="2" ) ;
set @sample= (select @total*(70/30)) ;
#@total,@sample
#4090,9543.333331970
#发布本文后,我可以通过这种通用语法获取元素
但是,将这两个条件的并集视为此处的并集时,它不起作用。而且使用“预测”或“预测”或“预测”的where条件(使用“”或“”)似乎不起作用-如何使其起作用
我的完整用例如下-:
#This logic is my end-goal in retrieval of records
PREPARE STMT FROM " SELECT * FROM tab_1 WHERE predict_var = '4' or predict_var = '2' ORDER BY RAND() union (SELECT * FROM tab_1 WHERE predict_var = '0' or predict_var = '1' ORDER BY RAND() limit ? )"
EXECUTE STMT USING @sample; # **does not work**
# This does not work either and gives "Error(1221) incorrect usage of union and order by
我也尝试过类似的方法(我认为这在efficienet中非常有效,因为这将创建临时表(我也可以选择视图,但关键是要正确)
我模模糊糊地理解这是关于移动工会和订单条款
提示:-请解释为什么失败,如果可能的话,不要建议其他方法,比如连接。相关-看起来我明白了
PREPARE STMT FROM " SELECT * FROM tab_1 WHERE predict_var = '4' or predict_var = '2' union
(SELECT * FROM tab_1 WHERE predict_var = '0' or predict_var = '1' limit ? ) ORDER BY RAND() " ;
EXECUTE STMT USING @sample; # fetches a total of 13,633 records
*我唯一改变的是从第一个查询中完全删除order by,并将其放在组合查询之后(真是太小了!)
# using temp table/ could also get it via views - but doesn't work,nevertheless
#Alternate logic - but does not work either
PREPARE STMT FROM "SELECT * FROM tab_1 WHERE predict_var = '0' or predict_var = '1' ORDER BY RAND() limit ? " ; # Works
create table temp
select * from (EXECUTE STMT USING @sample ) ; # Error(1064)
SELECT * FROM tab_1 WHERE predict_var = '4' or predict_var = '2' ORDER BY RAND() union select * from temp ; # of course does not work
PREPARE STMT FROM " SELECT * FROM tab_1 WHERE predict_var = '4' or predict_var = '2' union
(SELECT * FROM tab_1 WHERE predict_var = '0' or predict_var = '1' limit ? ) ORDER BY RAND() " ;
EXECUTE STMT USING @sample; # fetches a total of 13,633 records