我有两个表,Foo和Bar。 Foo包含Bar的主键(bar_id)的外键。 Bar的结构允许父/子关系通过外键(bar_parent_id)与Bar中的另一条记录进行关联。这种关系是有限的,任何具有父母的条形记录本身都不能成为父母。但是,任何给定的父母可以有多个孩子。带有复杂子查询的SQL查询
我的查询需要选择Foo中与Bar中的给定记录匹配的所有记录以及酒吧的任何父母,孩子或兄弟姐妹。下面的查询工作,但有点慢。有没有什么办法可以让它运行得更快?
SELECT f.field1, f.field2
FROM Foo f
WHERE f.bar_id IN (
SELECT bar_id
FROM Bar
WHERE bar_id = @bar_id OR
bar_parent_id = @bar_id OR
bar_id = (SELECT bar_parent_id FROM Bar WHERE bar_id = @bar_id) OR
bar_parent_id = (SELECT bar_parent_id FROM Bar WHERE bar_id = @bar_id AND bar_parent_id > 0)
)
P.S.这是真正查询的简化版本。它实际上与另一个与Bar具有相同自/父/子关系的表具有相同的子查询。
您是否尝试过使用exists代替为您的WHERE子句? – JNK 2010-08-05 17:52:56