Объединить непустую CONCAT_GROUP с родительским столбцом в MySQL

Вы должны создать статический заводский метод, который принимает один аргумент и аннотирует его с помощью @JsonCreator (доступно с Jackson 1.2)

@JsonCreator
public static Event forValue(String value) { ... }

Подробнее о аннотации JsonCreator здесь .

2
задан GMB 22 February 2019 в 02:32
поделиться

1 ответ

Следующее выражение должно возвращать ожидаемые результаты:

CONCAT(
    store_cat.name,
    IFNULL(
        CONCAT(
            ' (', 
            GROUP_CONCAT(
                store_cat_attribute.name 
                ORDER BY store_cat_attribute.position 
                SEPARATOR ', '
             ),
            ')'
        ),
        ''
    )
) AS name

По сути, это просто пытается GROUP_CONCAT() атрибуты, и если результат равен NULL, то он превращает список атрибутов пустая строка. Обратите внимание, что GROUP_CONCAT поддерживает ORDER BY.

Я также исправил предложение GROUP BY: в не древних версиях MySQL все неагрегированные столбцы должны появляться в предложении where (у вас нет store_cat.name).

Демонстрация DB Fiddle с вашими примерами данных:

SELECT 
    store_cat.id_cat AS id,
    CONCAT(
        store_cat.name,
        IFNULL(
            CONCAT(
                ' (', 
                GROUP_CONCAT(store_cat_attribute.name ORDER BY store_cat_attribute.position SEPARATOR ', '),
                ')'
            ),
            ''
        )
    ) AS name, 

    COUNT(store_item.id_item) AS products, 
    store_cat.flg_public AS flg_public 
FROM 
    store_cat 
    LEFT JOIN store_item ON store_item.id_cat = store_cat.id_cat 
    LEFT JOIN store_cat_attribute ON store_cat_attribute.id_cat = store_cat.id_cat 
WHERE store_cat.id_store = 1 
GROUP BY store_cat.id_cat, store_cat.name
ORDER BY name;
| id  | flg_public | name                  | products |
| --- | ---------- | --------------------- | -------- |
| 3   | 1          | Comidas               | 0        |
| 2   | 1          | Correas (S, M, L, XL) | 4        |
| 1   | 1          | Juguetes              | 2        |
| 4   |            | Medicinas             | 0        |
0
ответ дан GMB 22 February 2019 в 02:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: