Происходит то, что в результатах создается запись для каждого случая, когда элемент соответствует категории / подкатегории.Так, например, если элемент A имеет 3 категории, к которым он принадлежит, результаты будут включать 3 экземпляра элемента A, соответствующих каждой из этих категорий.Естественно, это осложняется таблицей подкатегорий, а также присоединяется к ней.Если у элемента было 3 категории и 2 подкатегории, которые возвращали бы 6 результатов!
Если вам не важно, какую категорию и / или подкатегорию вы выбрали для определенного элемента, вы можете просто сделать что-то вроде этого:
select a.TB_ITEM_NAME, b.TB_ITEM_CAT_NAME, c.TB_ITEM_SUBCAT_NAME from
TB_ITEM a inner join
TB_ITEM_CAT b on a.TB_ITEM_CAT_ID = b.TB_ITEM_CAT_ID
inner join TB_ITEM_SUBCAT c
on a.TB_ITEM_SUBCAT_ID = c.TB_ITEM_SUBCAT_ID
GROUP BY a.TB_ITEM_ID
Также, если вы просто хотите получить один экземпляр каждого элемента и разделенный запятыми список категорий, подкатегорий, я думаю, что-то вроде этого должно работать:
select a.TB_ITEM_NAME, GROUP_CONCAT(b.TB_ITEM_CAT_NAME), GROUP_CONCAT(c.TB_ITEM_SUBCAT_NAME) from
TB_ITEM a inner join
TB_ITEM_CAT b on a.TB_ITEM_CAT_ID = b.TB_ITEM_CAT_ID
inner join TB_ITEM_SUBCAT c
on a.TB_ITEM_SUBCAT_ID = c.TB_ITEM_SUBCAT_ID
GROUP BY a.TB_ITEM_ID
Iнадеюсь, это поможет вам понять!