快速的注意

所以,为我写的问题,下面我找到了一种方法来解决它自己。我想我仍然张贴的问题,因为:

  1. 有人可能会发现它很有用。
  2. 我不了解太多,为什么它的工作。

无论如何固定码(参见答)。


我原来写道:

我已经花了年龄在谷歌上搜索这一点,可以找到很多相关的答案,但没有完全匹配我的问题。

我运行代码下面对一个SQL服务器(10)数据库和执行速度非常快。执行计划,它使用涉及一散列加入。

然后,我再次运行,而此时取消第一线的两个(声明,并设置线),并且还删除'+1旁y。[日期]和取消'+@反'.现在的查询需要年龄(在年龄)来完成执行计划,而不是使用嵌套的循环。注意我仍然只是添加一个日期,但是用一个变量,而不是一个恒定不变。

问题是:我可以查询使用@计数器使用的散列加入,而不是一套循环?

(一点的背景:我想要做的就是松散地匹配。[日期]和y。[日期],以便它们匹配,如果他们在规定的天数。天数的查询使用的是从一个领域中的另一个表中。我试图使用datediff()第一abs()以及不到,但我肯定这将会一直使用嵌套的循环。(它不会时,我尝试也无妨!)

我试图做的一切中提到的各种参数嗅闻的文章,但他们并没有改变的事情。无论如何我不是在运行这样一个存储的过程。我猜有些事情要做到与指数在[日期]的领域。)

-- DECLARE @COUNTER INT
-- SET @COUNTER = 1

BEGIN

    SELECT
        x.[line id]
        , y.[line id]

    FROM
        lines1 AS x
        JOIN lines2 AS y ON (

            x.[in date] = y.[in date] + 1 -- + @COUNTER
            AND x.[country] = y.[country]

        )

    WHERE
        x.[country] = 'USA'

END
有帮助吗?

解决方案

问题是:我可以查询使用@计数器使用的散列加入,而不是一套循环?

是的。你可以使用一个加入暗示的力量:

INNER HASH JOIN
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top