SQL table 加入自身但允许“0”值

SQL table join on itself but allow "0" value

好的,我有一个简单的 table "category" table 类别和子类别已保存。类别有 "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

在这个例子中,'fruit' 和 'vegetable' 是其余子类别的类别,我知道关于这个话题已经有很多问题得到了回答。但我的问题是:

如何加入 "ID" 和 "parent_id"。目前我正在使用 "xampp" 并且当我加入值时 xampp 不允许:

parent_id = 0;

因为它与 "ID" 的主键和外键链接。

使用带有适当 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 数据库略作调整。

不需要加入。
使用条件排序:

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

demo
结果:

| name      |
| --------- |
| fruit     |
| -apple    |
| -pear     |
| vegetable |
| -tomato   |