Соединение MySQL между двумя столбцами с условием case

#mysql

#mysql

Вопрос:

у меня есть таблица с данными, в которой есть данные как категории, так и подкатегории.

Итак, что такое категория и подкатегория?категория является родительской, а подкатегория — дочерней. Оба данных похожи, за исключением одного отличия, parent_id для sub_category — это идентификатор категории.

Пример данных: пример данных

Что требуется?

имя подкатегории в результате должно быть category-name ‘-‘ sub-category-name

Пример результата: Пример результата

Какова моя попытка решить проблему?

Запрос MySQL, который я возвращаю, выполняется только для извлечения подкатегории только с именами:

 SELECT 
    CONCAT(wcfc1.feed_category_name,
            '-',
            wcfc2.feed_category_name) AS feed_category_name,
    wcfc2.feed_category_id,
    wcfc2.parent_id,
    wcfc2.category_type_id
FROM
    wc_feed_categories wcfc1
        JOIN
    wc_feed_categories wcfc2 ON wcfc1.feed_category_id = wcfc2.parent_id;
 

Этот запрос показывает только:
myResult

я не могу понять, как написать запрос, чтобы показать как категорию, так и подкатегорию с изменением имени в одном запросе.

Ответ №1:

Вместо

     JOIN
wc_feed_categories wcfc2 ON wcfc1.feed_category_id = wcfc2.parent_id;
 

попробуйте

     LEFT JOIN
wc_feed_categories wcfc2 ON wcfc1.parent_id = wcfc2.feed_category_id;
 

таким образом, ваш запрос будет:

 SELECT 
    CASE 
       WHEN wcfc1.parent_id = 0 THEN wcfc1.feed_category_name
       ELSE
            CONCAT(wcfc2.feed_category_name,  -- parent category
               '-', 
               wcfc1.feed_category_name)      -- child category
       END AS feed_category_name,
    wcfc1.feed_category_id,
    wcfc1.parent_id
FROM
    wc_feed_categories wcfc1
        LEFT JOIN
    wc_feed_categories wcfc2 ON wcfc1.parent_id = wcfc2.feed_category_id;
 

Демонстрация здесь

Комментарии:

1. это работает, и я понял, как оно выполняется.