2

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に何らかの制限があるためですか?

4

1 に答える 1

1

私のマシンではこれを再現できませんでした...唯一の違いは、2つのクエリのソート順です。ソート順が異なるため、結果セットが異なるように見えるかもしれません。両方のクエリを追加ORDER BY rlt.s6 DESCして実行してみてください。これにより、同じレコードが同じ順序で配置された結果セットが得られます。

于 2013-02-26T08:15:00.600 に答える