mysql - 在只读 mysql 数据库中声明一个变量
问题描述
我的问题和这个问题一样:Declare a variable in a 'read only' MySQL database,但我不能在那里使用解决方案,因为我的查询太长并且需要太多额外的连接,这会减慢查询速度并使它暂停。
我对使用 MySQL Workbench 访问的 MySQL 数据库具有只读访问权限。
我应该期望能够使用变量吗?到目前为止,我没有运气。我尝试了以下方法:
set @project_ids := '674,705' -- RESTRICT PROJECTS; list must have no spaces
select distinct t.project_id, count(distinct(t.user_id)) as 'Total Users'
from table t
where find_in_set(@project_ids, t.project_id) -- RESTRICT PROJECTS
group by t.project_id
但我只是得到:
错误代码:1064。您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在“在第 2 行选择不同的 t.project_id”附近使用正确的语法
我也试过:
-- where find_in_set(pm.project_id, @project_ids) <> 0 -- RESTRICT PROJECTS: project_id field is in set of project ids
-- where pm.project_id in (674, 705) -- RESTRICT PROJECTS
我还尝试将set @project_ids := '674,705'
线路移动到查询中的各个位置,这也失败了。
我想使用变量来限制 project_ids 列表的原因是因为实际查询很长(275 行,将 20 个表连接在一起,包括 5 个子查询加上一个联合 - 这是同事的请求,这是唯一的症结)并引用此列表 8 次 - 我不希望(他们)每次我/他们运行它时都必须在 8 个位置更新此查询。
解决方案
解决方案:
- 在 SET 语句的末尾添加分号
- 以正确的顺序获取 FIND_IN_SET 的参数,应该是 (field-to-look-in, @variable-that-contains-values-to-look-up)
推荐阅读
- php - Apache 无法识别隐藏的 .index.php 文件
- mysql - 如何在一个查询中计算多个结果的最大值和最小值?
- python - Kivy - 运动事件:on_mouse_pos
- tensorflow - Tensorflow:“您必须使用 dtype float 和 shape [?,2] 为占位符张量 'y' 提供一个值”
- javascript - webpack4 css捆绑不适用于自定义样式名称
- python - “page”/create 发生冲突,因为 slug django
- scala - 上下文感知类型类
- apache-kafka - Kafka Offsets.storage
- anylogic - 返工产品所花费的时间 - Anylogic
- r - 如何检测以'abc'开头然后有'n'个数字然后再有字母的字符串?