MYSQL :: Хранимая процедура, где условие не работает - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь построить json объект из MYSQL, выберите и передайте его параметру. все работает нормально, но мое условие «где» не применяется, когда я использую json_object, json_arrayagg, json_objectagg.

мой запрос на выборку

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 строки, как и ожидалось.

что я здесь делаю неправильно ...

1 Ответ

0 голосов
/ 02 марта 2020

Если вы хотите ограничить количество агрегируемых строк, вам нужно использовать подзапрос, чтобы ограничить выбранные строки, а затем агрегировать в основном запросе.

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;
...