我有兩個表,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