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 |
好的,我有一个简单的 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 |