【问题标题】:MYSQL:: Stored Procedure where condition is not workingMYSQL:: 条件不起作用的存储过程
【发布时间】:2020-06-15 01:46:53
【问题描述】:

我正在尝试从 MYSQL 选择构建 json 对象并将其传递给输出参数。 一切正常,但是当我使用 json_object、json_arrayagg、json_objectagg 时,我的 where 条件不适用。

我的选择查询是,

SELECT   json_object('arraylist',json_arrayagg(json_object('id',id,'code', code, ..., ..., ...))) AS jsonobj
FROM     normal_table a 
WHERE    a.code='826' 
AND      a.status='true' 
AND      a.vb_code ='124' 
ORDER BY a.date_ts DESC limit 3;

对于此查询,表中的所有记录都将被填充。

如果我像下面这样删除

SELECT   json_object('id',id,'code', code, ..., ..., ...) AS jsonobj 
FROM     normal_table a 
WHERE    a.code='826' 
AND      a.status='true' 
AND      a.vb_code ='124' 
ORDER BY a.date_ts DESC limit 3;

它只返回预期的 3 行。

我在这里做错了什么......

【问题讨论】:

  • 你有“限制 3”...它总是返回最多 3 行。你的期望是什么?
  • @Ci-CiMillsThomson,这是我所期待的,但它正在返回表中的所有行。
  • 你没有GROUP BY,所以这只返回1行,它聚合了所有匹配WHERE子句的行。
  • LIMIT 适用于聚合后的结果,而不是聚合后的行数。
  • 存储过程在哪里?这只是一个普通的查询,它在 SP 中的工作方式相同。

标签: mysql json stored-procedures mysql-json


【解决方案1】:

如果要限制聚合的行数,需要使用子查询限制选中的行数,然后在主查询中聚合。

SELECT json_object('arraylist',json_arrayagg(json_object('id',id,'code', code, ..., ..., ...))) AS jsonobj
FROM (
    SELECT *
    FROM     normal_table a 
    WHERE    a.code='826' 
    AND      a.status='true' 
    AND      a.vb_code ='124' 
    ORDER BY a.date_ts
    DESC limit 3
) AS x;

【讨论】:

    猜你喜欢
    • 2020-04-06
    • 1970-01-01
    • 2020-11-10
    • 2014-12-31
    • 2012-04-07
    • 2021-10-02
    • 2019-06-28
    • 2018-03-28
    • 1970-01-01
    相关资源
    最近更新 更多