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