根据主题 - 我试图用INNER或LEFT JOIN替换慢速SQL IN语句。我想摆脱的是:
SELECT
sum(VR.Weight)
FROM
verticalresponses VR
WHERE RespondentID IN
(
SELECT RespondentID FROM verticalstackedresponses VSR WHERE VSR.Question = 'Brand Aware'
)
以上我尝试用
替换SELECT
sum(VR.Weight)
FROM
verticalresponses VR
LEFT/INNER JOIN verticalstackedresponses VSR ON VSR.RespondentID = VR.RespondentID AND VSR.Question = 'Brand Aware'
但不幸的是我得到了不同的结果。任何人都可以看到为什么,如果可能的话,建议一个能够更快地完成工作的解决方案? 非常感谢!
答案 0 :(得分:2)
子查询
SELECT RespondentID FROM verticalstackedresponses VSR WHERE VSR.Question = 'Brand Aware'
可能会为任何RespondentID返回多行,然后在连接和版本之间会得到不同的结果
根据这一点,可能会产生相同的结果
SELECT
sum(VR.Weight)
FROM
verticalresponses VR
JOIN( SELECT distinct RespondentID FROM verticalstackedresponses
WHERE VSR.Question = 'Brand Aware'
) VSR
ON VSR.RespondentID = VR.RespondentID
答案 1 :(得分:1)
无论哪种方式,您都需要合适的索引,可能是
答案 2 :(得分:1)
问题可能与重复有关。试试这个:
SELECT sum(VR.Weight)
FROM verticalresponses VR inner join
(select distinct RespondentID
from verticalstackedresponses VSR
where SR.Question = 'Brand Aware'
) vsr
ON VSR.RespondentID = VR.RespondentID;
您想要inner join
,因为您想要过滤VR
表。 left join
会将所有内容保留在第一个表格中。