0

如何使这个子查询成为好看的代码?我正在寻找有关 SQL 优化和代码风格的指南。

 SELECT foo FROM table WHERE foo_id IN 
    (
    SELECT idchild FROM table2 WHERE idparent IN 
    (SELECT idchild FROM table2 WHERE idparent IN 
    (SELECT idchild FROM table2 WHERE idparent = @id)
    ))
 AND txt_type ='some_cat'
4

3 回答 3

2

尝试 :

   Select a.foo,b.idchild from Table as a inner join table2 as b
   on a.foo_id=b.idchild and b.idparent=@id  AND a.txt_type ='some_cat'
于 2012-06-22T10:42:51.000 回答
2

为了获得更好的性能和可读性,请执行以下操作:

select t4.foo
from table2 t1
join table2 t2 on t2.idparent = t1.idchild
join table2 t3 on t3.idparent = t2.idchild
join table t4 on t4.foo_id = t3.idchild and t4.txt_type ='some_cat'
where t1.idparent = @id

请注意,从中选择的第一个表如何在 where 子句中具有索引谓词。该查询将在整个查询过程中一直使用索引访问,并且非常高效。

还要注意我是如何将 txt_type 的谓词移动到on子句中的,它可以在读取行时应用,而不是在组装连接之后应用。

于 2012-06-22T10:44:25.923 回答
1

要么使用Praveen 的解决方案,要么使用以下解决方案。两者都经过适当优化。

SELECT foo 
FROM   table1 
WHERE  EXISTS (SELECT 1 
               FROM   table2 
               WHERE  idparent = @id 
                      AND table2.idchild = table1.foo_id) 
       AND txt_type = 'some_cat' 
于 2012-06-22T10:48:29.150 回答