【发布时间】:2019-10-25 02:32:08
【问题描述】:
我有一个facilities 表。这些列是id(主)、sector(整数)和located_in(可为空,在同一张表上引用id)。
大多数时候,located_in 列是 NULL,但在某些情况下,facilities 可以位于其他 facilities 内部。
如果发生这种情况,我希望父设施不会成为结果的一部分(因此被移除)。
一个设施只能位于另一个不位于另一个设施中的设施中,因此这不会深入到 n 层。
数据集(View on SQLFiddle):
+----+--------+------------+
| ID | sector | located_in |
+----+--------+------------+
| 1 | 2 | NULL |
| 2 | 2 | NULL |
| 3 | 4 | NULL |
| 4 | 1 | NULL |
| 5 | 5 | NULL |
| 6 | 2 | 2 |
+----+--------+------------+
查询(View on SQLFiddle):
SELECT * FROM facilities WHERE sector = 2;
预期结果(View on SQLFiddle):
+----+--------+------------+
| ID | sector | located_in |
+----+--------+------------+
| 1 | 2 | NULL |
| 6 | 2 | 2 |
+----+--------+------------+
实际结果(View on SQLFiddle):
+----+--------+------------+
| ID | sector | located_in |
+----+--------+------------+
| 1 | 2 | NULL |
| 2 | 2 | NULL |
| 6 | 2 | 2 |
+----+--------+------------+
【问题讨论】:
标签: mysql database database-design query-optimization