2014-03-31 37 views
0

我在我的應用程序中執行效果不佳。我認爲它可以被優化,但是我的SQL技能讓我失望。下面是一種元-SQL的查詢:修復了效率低下且難以查詢的問題

SELECT A.Value, count(*) 
FROM B 
    JOIN A ON B.A_ID = A.ID 
    JOIN C ON C.ID = B.C_ID 
WHERE B.C_ID IN (
    SELECT B.C_ID 
    FROM C 
     JOIN B ON B.C_ID = C.ID 
     JOIN A ON B.A_ID = A.ID 
    WHERE A.VALUE IN 'string literal' 
) 
GROUP BY A.VALUE 

C是空缺的表,B是空缺的屬性表,A是屬性值的表。這些表具有1到N的關係。我們需要找到與其相關的具有固定財產價值的空位的所有其他財產價值(及其發生次數)的清單。

請幫助優化查詢效率。

提前致謝!

回答

1

在任何一個查詢中,您都不需要加入C,除非用於過濾(即,不匹配被過濾掉)。試試這個:

SELECT A.Value, count(*) 
FROM B JOIN 
    A 
    ON B.A_ID = A.ID 
WHERE EXISTS (SELECT 1 
       FROM B b2 JOIN 
        A a2 
        ON b2.A_ID = a2.ID 
       WHERE a2.VALUE = 'string literal' AND b2.C_ID = b.C_ID 
      ) 
GROUP BY A.VALUE;