我的应用程序中有一个表现不佳的查询。我认为它可以被优化,但我的SQL技能让我失望。这是一种meta-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个关系。我们需要找到具有与之相关的某个固定资产价值的空缺的所有其他房产价值(及其发生次数)的清单。
请帮助优化查询效率。
提前致谢!
答案 0 :(得分: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;