SQL子查询编码风格

时间:2012-06-22 10:38:12

标签: sql sql-server

如何使这个子查询成为好看的代码?我查看有关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'

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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子句中的,它可以在读取行时应用,而不是在组合连接之后应用。

答案 2 :(得分: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'