Выберите в таблице MySQL с отношениями самостоятельного соединения - PullRequest
0 голосов
/ 18 ноября 2018

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

enter image description here

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

enter image description here

Желаемый вывод:

enter image description here

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

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 Ответ

0 голосов
/ 18 ноября 2018

Вы можете сделать это, не используя "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/#!9/72ffbcf/6

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