Выберите в таблице MySQL с отношениями самостоятельного соединения

Я не очень знаком с отношениями самосоединения, но я хотел знать, возможно ли, выполнив SELECT, показать продукты по отношению к другим продуктам непосредственно под продуктом, на который есть ссылка, в этой таблице mysql

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

Желаемый результат:

Я пробовал несколько запросов, но я получаю только поле со списком, например, связанных продуктов в самой строке:

select p1.idP, p1.name, group_concat(p2.idP) 
from prodotti p1
left join prodotti p2 on p1.idP = p2.prodotti_idP
group by p1.idP;

Я хотел бы показать записи, связанные с другими ТОЛЬКО непосредственно под "родительским" продуктом

SQL Fiddle

Спасибо

1 ответ

Решение

Вы можете сделать это, не используя "Self Join". Условный ORDER BY с помощью CASE .. WHEN выражения будут работать. Если prodotti_idP является null, это в основном означает, что это родительский продукт. Таким образом, мы можем просто отсортировать его по idP значение; в противном случае мы будем использовать его родительский идентификатор (prodotti_idPсортировать по. Сортировка второго уровня должна быть сделана на idP значение.

select idP, name, prodotti_idP
from prodotti 
order by 
  case when prodotti_idP is null then idP
       else prodotti_idp
  end, 
  idP

Демонстрация SQL Fiddle: http://sqlfiddle.com/

Другие вопросы по тегам