sql - 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”的主键和外键相关联。
解决方案
使用带有适当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 数据库,上述查询可能需要稍作调整。
推荐阅读
- java - 为什么通过 Intellij 使用 tomcat 启动 Web 应用程序时有时会出现奇怪的 FileNotFoundExceptions
- sql - 动态 SELECT 和 WHERE 子句
- c - 如何在没有操作系统的情况下通过串口发送数据最少?
- async-await - 我想使用 Async/await 和 onPrepare 来确保我的测试在 onPrepare 完成之前不会开始
- xaml - 如何使用标签显示字符串和带有下划线的 URL 的组合
- html - html:字体大小中的 max 函数不起作用
- python - 如何测试使用 Wagtail Hooks 注册的端点?
- sql - SQL Server 中的扩展日期排序
- azure-log-analytics - Azure LogAnalytics 查询禁用的流量管理器配置文件
- angular - 在 Angular 中拖动时触发 mouseenter 和 mouseleave