我有一个由四部分组成的链接服务器查询,LEFT OUTER使用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有一些限制吗?
答案 0 :(得分:1)
无法在我的机器上重现这个...唯一的区别在于两个查询的排序顺序。也许它只是在视觉上看起来因为不同的排序顺序而导致结果集不同。尝试在两个查询中添加ORDER BY rlt.s6 DESC
然后运行它们,这应该为您提供具有相同顺序排列的相同记录的结果集。