首页 > 解决方案 > SQL 表连接自身但允许“0”值

问题描述

好的,所以我在此表类别上有一个简单的表“类别”,并保存了子类别。类别具有“parent_id=0”,子类别具有等于该类别的 row_id 的“parent_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

在这个例子中,“水果”和“蔬菜”是类别,其余子类别,我知道在这个主题上已经有很多问题得到了回答。但我的问题是:

我如何加入“ID”和“parent_id”。目前我正在使用“xampp”,当我加入 xampp 不允许的值时:

parent_id = 0;

因为它与“ID”的主键和外键相关联。

标签: sqlforeign-keysself-join

解决方案


使用带有适当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 数据库,上述查询可能需要稍作调整。


推荐阅读