UNION ALL を使用してオンザフライで作成されたテーブルを LEFT OUTER JOIN する 4 つの部分からなるリンク サーバー クエリがあります。
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に何らかの制限があるためですか?