はスキーマ:- サブクエリ
create table TableA (A1 int)
create table TableB (B1 int, B2 int)
create table TableC (C1 int)
問題のクエリ:
SELECT *
FROM TableA a
INNER JOIN TableB b ON b.B1=a.A1
INNER JOIN (SELECT TOP 1 *
FROM TableC c
WHERE c.C1=b.B1 ORDER BY c.C1) d ON d.C2=b.B2
INNER JOIN OtherTable ON OtherTable.Foo=d.C1
はこのスキーマを構築し、SQL Server 2008件の結果の下にSQLFiddleでクエリを実行している中:
The multi-part identifier "b.B1" could not be bound.: SELECT * FROM TableA a INNER JOIN TableB b ON b.B1=a.A1 INNER JOIN (SELECT TOP 1 * FROM TableC c WHERE c.C1=b.B1 ORDER BY c.C1) d ON d.C2=b.B2
サブクエリの修正にINNER JOINの代わりにCROSS APPLYを使用する問題
何が問題なのですか?
編集:実際のクエリに含まれていた「TOP 1」を追加しました。問題の関連部分です。
Edit2:問題の詳細。
OKです。あなたのサブクエリを見てください。 C1とORDER BY C1でフィルタリングします。意味は何ですか?あなたはC2を注文する必要があります。 –
これは実際のクエリの抽象です –
しかし、あなたは論理を歪ませます。私の更新された答えを見てください。 –