【问题标题】:Declare a variable in a read-only mysql database在只读 mysql 数据库中声明一个变量
【发布时间】:2020-09-28 03:48:13
【问题描述】:

我的问题与这个问题相同: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 个位置更新此查询。

【问题讨论】:

  • 第一行后面的分号?
  • 它跑了,万岁!但它没有产生任何输出,它肯定应该这样做:(
  • 双重不同的值?
  • 'double distinct values' - 你的意思是在 SELECT 行和 COUNT 中吗?这在这种格式下工作得很好:select distinct t.project_id, count(distinct(t.user_id)) as 'Total Users' from table t where t.project_id in (674, 705) group by t.project_id
  • 当时认为错误可能是太多的不同会限制太多的选择过程并返回错误。实际上,它很可能只返回非常有限的结果。

标签: mysql variables mysql-workbench


【解决方案1】:

解决方案:

  1. 在 SET 语句的末尾添加分号
  2. 以正确的顺序获取 FIND_IN_SET 的参数,应该是 (field-to-look-in, @variable-that-c​​ontains-values-to-look-up)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-30
    • 2015-03-14
    • 2017-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    相关资源
    最近更新 更多