SQL таблица объединяется сама по себе, но допускает значение "0" - PullRequest
1 голос
/ 08 марта 2020

Хорошо, у меня есть простая таблица "категория", в которой сохраняются категории и подкатегории. категории имеют "parent_id = 0", а подкатегории имеют "parent_id", который равен row_id категории.

, например,

ID  name       parent_id
1   fruit      0
2   apple      1
3   pear       1
4   vegetable  0
5   tomato     4

Fruit
-apple
-pear
vegetable
-tomato

В этом примере "фрукты" и "овощи" это категории остальные подкатегории, я знаю, что на этом toppi c уже много вопросов, на которые даны ответы. Но мой вопрос:

как я могу объединить "ID" и "parent_id". В настоящее время я использую «xampp», и когда я присоединяю значения, xampp не позволяет:

parent_id = 0;

, потому что он связан с первичным и внешним ключом «ID».

Ответы [ 2 ]

1 голос
/ 08 марта 2020

Нет необходимости в соединении. Используйте условную сортировку:

select 
  concat(case when parent_id <> 0 then '-' else '' end, name) name
from category
order by 
  case when parent_id = 0 then id else parent_id end, 
  parent_id

См. Демоверсию Результаты:

| name      |
| --------- |
| fruit     |
| -apple    |
| -pear     |
| vegetable |
| -tomato   |
1 голос
/ 08 марта 2020

Используйте самостоятельное объединение с соответствующим предложением ORDER BY:

SELECT
    CASE WHEN c1.parent_id = 0 THEN c1.name ELSE ' - ' || c1.name END AS name
FROM category c1
LEFT JOIN category c2
    ON c1.parent_id = c2.ID
ORDER BY
    COALESCE(c2.ID, c1.ID),
    c1.ID;

Примечание. Возможно, приведенный выше запрос может быть немного скорректирован в зависимости от вашей фактической базы данных SQL.

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