我有以下表格结构 表“位置”有 - ID - parentLocation_id(与自身的关系) - 姓名
我们假设我们有以下数据:
id parentLocation_id name
1 null Egypt
2 1 Cairo
3 2 Zamalek
这里我们有三个级别的位置,我想获得id = 1的所有级别(位置)或location_id的子级。
如果我选择埃及位置(获得所有继承级别),结果必须包含所有三个位置。
我尝试了以下
select l.id from Location as l where l.id = 1 or l.id in (select id from Location where parentLocation_id= l.id);
这里结果不正确,这里我只达到了第二级。
我该怎么做?
提前致谢
答案 0 :(得分:0)
如果您总是有三个级别,则此查询有效。
SELECT *
FROM location l1, location l2, location l3
WHERE l1.id = 1
AND l1.id = l2.parentLocation_id
AND l2.id = l3.parentLocation_id
你需要它只拉出2个级别吗?例如, 埃及,开罗如果没有第3级(扎马雷克)?
答案 1 :(得分:0)
您要存储的内容是层次结构,在数据库中正确实现非常棘手。
有关详细信息,请查看此信息:Trees and Hierarchies in SQL
答案 2 :(得分:0)
这是另一个可能更符合您期望结果的答案。请注意,您需要放置三(3)个所需的ID
SELECT l1.id AS select_id
FROM location l1
WHERE l1.id IN (
SELECT l2.id
FROM location l2, location l3
WHERE l2.id = 1 OR l2.parentLocation_id = 1 OR (l2.parentLocation_id = l3.id AND l3.parentLocation_id = 1)
)