如何使用嵌套选择

时间:2010-06-30 10:14:26

标签: mysql

我有以下表格结构 表“位置”有     - 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);

这里结果不正确,这里我只达到了第二级。

我该怎么做?

提前致谢

3 个答案:

答案 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)
)