MySQL选择内部选择内部选择

时间:2014-06-21 16:58:54

标签: mysql select nested parent children

我想要的是所有parentid数字,这些数字来自多个其他父母的孩子,这些父母也是来自另一个父母的孩子。所有行都在同一个表中。

现在我到目前为止(这是有效的):

SELECT * 
FROM location 
WHERE parentid IN (
    SELECT id 
    FROM location 
    WHERE parentid IN (
        SELECT id 
        FROM location 
        WHERE parentid = 0
    )
)

我唯一想知道的是,有没有更好/更快的方法来实现完全相同的东西?该表包含大约200,000行。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你想要parentid = 0的孙子。就个人而言,我认为是明确的 联接更容易遵循,并可能产生更好的执行计划:

select l2.*
from location l join
     location l1
     on l1.parentid = l.parentid join
     location l2
     on l2.parentid = l1.id
where l.parentid = 0;

唯一的警告:也许where语句应为where l.id = 0。在这种情况下,您实际上可以将查询简化为:

select l2.*
from location l1
     location l2
     on l2.parentid = l1.id
where l1.parentid = 0;