我有一个由四部分组成的链接服务器查询,该查询 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 有一些限制吗?