过滤器中的EXISTS返回太多值

时间:2017-05-16 17:39:40

标签: tsql ssms exists

我需要编写一个使用EXISTS而不是IN的查询,以便它能够快速运行。过滤器被输入如此多的参数值,EXISTS似乎是唯一的选择。区别在于20分钟以上的查询和5秒的查询。

这是我的查询:

SELECT DISTINCT d.GROUP_NAME
FROM [EMPLOYEE] e JOIN [DATA_FACT] d ON (e.KEY = d.KEY)
WHERE d.DATE BETWEEN @Start and @End
AND EXISTS
(              
    select '1234567' -- @ID
) 
AND e.Location IN (@Location)
ORDER BY d.GROUP_NAME ASC

问题是它返回了太多记录。基于我传递给过滤的值​​,我应该得到1行,但我得到28。

如果我删除EXISTS并添加以下内容,那么我将得到我需要的1条记录:

AND e.ID IN ('1234567')

有没有办法修复查询以使用EXISTS以便我得到正确的结果?

1 个答案:

答案 0 :(得分:0)

如果您打算尝试使用exists来过滤employee表中的参数来过滤data_fact表,那么这基本上就是您想要的。当你向其投入大量员工ID时,不确定它会改善你的表现。

SELECT 
    d.GROUP_NAME
FROM [DATA_FACT] AS d
WHERE d.DATE BETWEEN @Start and @End
AND EXISTS
(              
    select 1
    from EMPLOYEE AS e
    WHERE d.[KEY] = e.[KEY]
        AND e.[Location] IN (@Location)
        AND e.ID IN ('1234567')
)
ORDER BY d.GROUP_NAME ASC