我想要的是所有parentid数字,这些数字来自多个其他父母的孩子,这些父母也是来自另一个父母的孩子。所有行都在同一个表中。
现在我到目前为止(这是有效的):
SELECT *
FROM location
WHERE parentid IN (
SELECT id
FROM location
WHERE parentid IN (
SELECT id
FROM location
WHERE parentid = 0
)
)
我唯一想知道的是,有没有更好/更快的方法来实现完全相同的东西?该表包含大约200,000行。
答案 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;