2

我有一个由四部分组成的链接服务器查询,该查询 LEFT OUTER JOINs 使用 UNION ALL 动态创建的表,类似于以下内容:

SELECT t.column1, rlt.s6, SUM(t.column3) column3
FROM Linked_server.database.schema.table t
    LEFT OUTER JOIN (
        SELECT 1 AS s7, 15 AS s6
        UNION ALL SELECT 3, 1
        UNION ALL SELECT 20, 16
    ) rlt ON (rlt.s7 = t.column2)

这很好用。但是,当我使用 OPENQUERY 函数运行相同的查询时,如下所示:

SELECT * FROM OPENQUERY(Linked_server, '
    SELECT t.column1, rlt.s6, SUM(t.column3) column3
    FROM database.schema.table t
        LEFT OUTER JOIN (
            SELECT 1 AS s7, 15 AS s6
            UNION ALL SELECT 3, 1
            UNION ALL SELECT 20, 16
        ) rlt ON (rlt.s7 = t.column2)
')

, LEFT OUTER JOIN 失败并且 s6 列仅包含 NULL。我知道我可以重写查询 #2 以使其工作,但我很好奇为什么它不能按照它的编写方式工作?是因为我不知道对 OPENQUERY 有一些限制吗?

4

1 回答 1

1

无法在我的机器上重现它......唯一的区别在于两个查询的排序顺序。也许只是在视觉上看起来结果集因排序顺序不同而有所不同。尝试添加ORDER BY rlt.s6 DESC两个查询然后运行它们,这应该会为您提供以相同顺序排列的相同记录的结果集。

于 2013-02-26T08:15:00.600 回答