mysql - Mysql 内联查询返回的结果与使用会话变量的查询不同
问题描述
我有一个表“名字”
+----+-------+
| id | name |
+----+-------+
| 1 | Sam |
| 2 | Tom |
| 3 | David |
| 4 | Bob |
+----+-------+
现在我只想强制 MySql 在每次查询时给我一个随机名称。所以要做到这一点,我执行:
select name
from firstname
where id = CEIL((select count(*) from firstname) * rand());
并且此查询不时返回零到三个结果。但是,如果我设置一个包含先前计算的 id 的会话变量,那么它可以正常工作
set @x = CEIL((select count(*) from firstname) * rand());
select name
from firstname
where id = @x;
为什么会这样?如何在没有会话变量的情况下进行内联查询?
在“5.6.25”和“5.6.51”上测试
解决方案
select name
from firstname
JOIN (SELECT CEIL((select count(*) from firstname) * rand()) id) id USING (id);
您必须计算id
一次所需的随机数并将其应用于所有行,而在您的查询中计算并应用于具有不同结果的每个单独的行。
推荐阅读
- reactjs - MapStateToProps 在组件内部不起作用,但 Redux Devtools 显示数据
- apache - Apache 向请求 URI 添加了实际上不存在的字符,从而导致错误的重写规则
- python - Python XML用正则表达式查找元素?
- kubernetes - Ansible K8s 模块 - 一次应用多个 Yaml 文件
- clearcase - 如何在 ClearCase 中添加缺失的基础基线
- c# - cors c# web API react
- flutter - 如何更改颤动的页面切换动画?
- c# - 多个线程订阅同一个事件信号唤醒
- python - 使用 NaN 对 Pandas DataFrame 进行分组
- seaborn - 如何在 Seaborn 中的热图轴上表达网络信息